【发布时间】:2011-02-26 18:19:02
【问题描述】:
在多线程 Java 应用程序中,我需要遍历对象集合。由于集合和对象都可以在我迭代它们时被另一个线程修改,所以我需要使用同步。
但是不推荐嵌套同步块,因为它们可能导致死锁。我该如何解决这个问题?
Collection<Data> dataCollection = something.getDataCollection();
synchronized ( dataCollection ) {
for ( final Data data : dataCollection ) {
synchronized ( data ) {
data.doSomething(); // doSomething() changes object state
}
}
}
【问题讨论】:
-
您能否详细说明为什么需要同步您的集合,即您的数据成员是否相互依赖,或者您是否有某种逻辑可以同时查看所有成员并且无法处理添加还是删除?
-
新数据实例可以被另一个线程添加到集合中。
标签: java multithreading synchronization nested