私はHandlerThreadのソースコードを使用していますが、HandlerThreadのrun()メソッドの一部が同期されている理由を理解できません。HandlerThreadのrun()メソッドの一部が同期されているのはなぜですか?
@Override
public void run() {
mTid = Process.myTid();
Looper.prepare();
synchronized (this) {
mLooper = Looper.myLooper();
notifyAll();
}
Process.setThreadPriority(mPriority);
onLooperPrepared();
Looper.loop();
mTid = -1;
}
私はrun()
方法は、それはので、どのようにそれが複数のスレッドから到達することができ属するスレッドで呼び出されていると考え?
私は、誰かが同じHandlerThreadクラスの複数のインスタンスを作成して起動すると、状況に関係なく動作することを期待しています。
多分、他のスレッドはその 'Thread'インスタンスをロックしていますか? (これは一般的に悪い考えです) – SLaks
これは、そのクラスの他の部分と同じように "//スレッドが開始されていれば、ルーパーが作成されるまで待ってください。 synchronized(this){" –
これはちょうど推測です(アンドロイドは分かりません)が、 'handleThread.wait();'を呼び出すと、 'mLooper'の値が変わるのを待っているようです。 –