私のコードではset
、同じリソース上の別の同期ブロック内のリソースで同期ブロックを使用しています。これまでのところ問題は発生していませんが、興味があります。影響がある場合はどうなりますか?これらの同期されたブロックは互いに競合しますか?
Set<myClass> set = Collections.synchronizedSet(new HashSet<myClass>());
synchronized(set) {
set.add(new myClass());
...
writeSetContentsToFile();
}
public synchronized void writeSetContentsToFile() {
synchronized(set) {
...
}
}
セットは、他のスレッドによって継続的にアクセスおよび変更されます。同期writeSetContentsToFile()
したので、ファイルリソースで競合が発生することはありません。また、内部writeSetContentsToFile()
に同期ブロックがあり、反復中にセットに変更が加えられないようにします。