【发布时间】:2014-11-02 12:06:22
【问题描述】:
如果我在多线程环境中有一个组件列表,并且如果我在这个列表上执行任何操作,除了 add(在这种情况下我在列表上使用关键字 synchronized)和 get(组件调用的方法是 thread-安全),那是线程安全的吗?
public class Test {
private final ArrayList<Component> myContainer = new ArrayList<Component>();
public void add(Component){
synchronized(myContainer){
myContainer.add(Component)
}
}
public void useComponents()
{
for(Component c : myContainer)
c.use(); // method thread-safe
}
// no other operations on myContainer
}
【问题讨论】:
-
提供必要的代码来复制您的场景。根据当前的描述,代码仍然可能是线程不安全的。
-
Allawys 线程不安全? @LuiggiMendoza
-
useComponents是线程不安全的。当您遍历myContainer的内部元素时,任何其他线程都可以添加一个新的Component。
标签: java multithreading