在我的代码中,我set
在同一资源上的另一个同步块内的资源上使用了一个同步块。到目前为止,这并没有给我带来任何问题,但我很好奇:如果有的话,会有什么后果?这些同步的块会相互冲突吗?
Set<myClass> set = Collections.synchronizedSet(new HashSet<myClass>());
synchronized(set) {
set.add(new myClass());
...
writeSetContentsToFile();
}
public synchronized void writeSetContentsToFile() {
synchronized(set) {
...
}
}
该集合被其他线程不断地访问和更改。我同步writeSetContentsToFile()
了,所以文件资源不会有任何冲突,而且里面有一个同步块writeSetContentsToFile()
,以确保在迭代它时不会对集合进行任何更改。