我來自.NET
世界,不幸的是看着Java的來源與.NET
的眼睛。Java同步遊戲:同步&&等待&&通知
下面的代碼是從Android應用程序(雖然不是特定的Android在所有):
private class Worker implements Runnable {
private final Object mLock = new Object();
private Looper mLooper;
Worker(String name) {
Thread t = new Thread(null, this, name);
t.start();
synchronized (mLock) {
while (mLooper == null) {
try {
mLock.wait();
} catch (InterruptedException ex) {
}
}
}
}
public Looper getLooper() {
return mLooper;
}
public void run() {
synchronized (mLock) {
Looper.prepare();
mLooper = Looper.myLooper();
mLock.notifyAll();
}
Looper.loop();
}
public void quit() {
mLooper.quit();
}
}
我不是如何作品精確清晰。 首先,我認爲同步鎖定mLock對象,但如果之後構造函數線程首先進入同步塊,它會阻止它在mLock.wait()
,並通過阻止它進入同步塊隱式阻塞線程「t」。
這顯然是錯誤的,因爲我的手機響了像預想的那樣:)
下一個想法是,同步同步「代碼塊」(在這種情況下,有兩個同步塊是獨立=>線程可以輸入兩個不同的同步同時沒有任何限制地安裝),並且完全符合...
...直到我的同事告訴我mLock.wait()
在mLock上釋放鎖並使其他線程在同一時間進入mLock的臨界區。
我不確定我是否足夠清楚,所以很樂意回答關於此問題的任何進一步問題。
第一個問題:你的問題是什麼? – erickson 2009-12-17 14:56:23
這段代碼如何工作? :) – Jox 2009-12-17 15:00:19