我有一个关于同步列表的一般性问题。
可以说在构造函数中我正在创建一个列表

List synchronizedList = Collections.synchronizedList(list);

我有一种方法将对象添加到列表中。
public void add(String s){
    synchronizedList.add(s)
}

还有另一个线程每隔几秒钟检查一次是否有几行,将其转储到文件中并将其全部删除。

现在说我迭代每一行并将其保存到数据库。
在所有迭代之后,我清除了列表。

多线程支持对我有什么帮助?
我可以在另一个线程的clear()出现之前将元素添加到列表中。
除非我自己管理锁(我确实不需要该锁的同步列表),否则请自己锁。

最佳答案

Collections返回的同步列表在您的情况下无济于事。仅当您需要保证对单个方法调用的串行访问时,这才是好的。如果需要围绕更大的一组操作进行同步,则需要将该代码手动包装在synchronized块中。 Javadoc指出:



如果您的列表在其他地方使用,则至少可以保护它免受单独的方法调用,否则这些方法将不是线程安全的。但是,如果您要完全管理列表,则可以将synchronized块添加到add方法中,并使用迭代时使用的相同锁。

10-05 18:05