私はリファレンスと同期キーワードに関する問題で長時間混乱しています。 私は通常、このようないくつかのコードを参照してください。メンバ変数を置き換えるために地元の最後の変数OBJを使うべき理由Javaリファレンスと同期キーワードの実践についての質問?
Class someClass {
...
private SomeObject mObject;
...
public void someMethod() {
...
final SomeObject obj = mObject;
...
//then use the 'obj' variable rather than mObject
...
}
}
を私の質問はありますか? メンバー変数を直接使用しないのはなぜですか?
私はまた、このように、「同期」キーワードに関連するいくつかのサンプルコードを参照してください。
public void write(byte[] out) {
// Create temporary object
ConnectedThread r;
// Synchronize a copy of the ConnectedThread
synchronized (this) {
if (mState != STATE_CONNECTED) return;
r = mConnectedThread;
}
// Perform the write unsynchronized
r.write(out);
}
これらのコードは、同期目標を達成することができますなぜ? ありがとう!
2番目のサンプルは、著者がもちろん達成しようとしていることに依存して、私に欠陥があるようです。 –
私はmStateとmConnectedThreadと 'this'の関係やこのコードの目的が何であるかを理解していないので、本当に同期の例については答えられません。別のスレッドは同期ブロックの後でr.write(out)の前にmConnectedThreadをロックすることができますが、それ以上の情報がなければ問題があるかどうかわかりません。 –