javaの同期ステートメントは、同期ステートメントなしでスレッドにアクセスしている他のスレッドで同期されたオブジェクトの変更から保護しますか? 私はマルチスレッド プログラミングが初めてで、この問題について見つけたドキュメントに混乱しています。
次のコードがあるとしましょう。
public class Test {
public ArrayList<Integer> items = new ArrayList<Integer>();
public Test(ArrayList<Integer> items) {
this.items = items;
}
public void perform() {
synchronized(items) {
int size = items.size();
for(int n = 0; n < 10000; n++) {
for(int i = 0; i < size; i ++) {
items.set(i, items.get(i) + 1);
}
}
}
}
"perform" の内部ループが実行されている間、ループ全体が "synchronized(items)" ステートメントに含まれているにもかかわらず、"items" が別のスレッドで変更される可能性はありますか? それとも、「同期」ステートメントは、「同期 (アイテム)」自体を使用して「アイテム」のロックを要求する他のブロックによる変更からのみ保護しますか?
助けてくれてありがとう。