我有一个关于同步列表的一般性问题。
可以说在构造函数中我正在创建一个列表
List synchronizedList = Collections.synchronizedList(list);
我有一种方法将对象添加到列表中。
public void add(String s){
synchronizedList.add(s)
}
还有另一个线程每隔几秒钟检查一次是否有几行,将其转储到文件中并将其全部删除。
现在说我迭代每一行并将其保存到数据库。
在所有迭代之后,我清除了列表。
多线程支持对我有什么帮助?
我可以在另一个线程的clear()出现之前将元素添加到列表中。
除非我自己管理锁(我确实不需要该锁的同步列表),否则请自己锁。
最佳答案
Collections
返回的同步列表在您的情况下无济于事。仅当您需要保证对单个方法调用的串行访问时,这才是好的。如果需要围绕更大的一组操作进行同步,则需要将该代码手动包装在synchronized
块中。 Javadoc指出:
如果您的列表在其他地方使用,则至少可以保护它免受单独的方法调用,否则这些方法将不是线程安全的。但是,如果您要完全管理列表,则可以将synchronized
块添加到add
方法中,并使用迭代时使用的相同锁。