同期化されたキーワードがJava 6でどのように機能するかを明確にする必要があります。Java synchronizedキーワード - クラスメソッドが同時に実行されるのを防ぎますか?
次のクラスの例を使用します。
class Carrier {
private String[] _collection = new String[2];
public Carrier() {
this._collection[0] = "abc";
this._collection[1] = "123";
}
public syncronized void change(int cId) {
Thread.sleep(3000);
this._collection[cId] = "changed";
}
}
次に、アプリケーション内のいくつかの場所は、キャリアクラスの同じオブジェクトインスタンスを参照し、.change()メソッドは、おそらく同時に、呼び出されます。
...carrier.change(1);
...
...carrier.change(1);
syncronizedキーワードは、メソッドのasyncronized実行を防止しますか?単に呼び出しを.change()にキューイングし、それぞれが完了するのを待つでしょうか?
'呼び出しをキューに入れるだけですか?change() 'キューの意味に依存します。実行順序は指定されていないため、順序付けされたキューではありませんが、他のスレッドは強制的に待機します。 – Kaj