【发布时间】:2011-05-24 07:19:02
【问题描述】:
我有一个关于同步列表的一般性问题。
可以说在构造函数中我正在创建一个列表
List synchronizedList = Collections.synchronizedList(list);
我有一种方法将对象添加到列表中。
public void add(String s){
synchronizedList.add(s)
}
还有另一个线程每隔几秒检查一次是否有几行,将其转储到一个文件中并将它们全部删除。
现在假设我迭代每一行并将其保存到数据库中。 在所有迭代之后,我清除了列表。
多线程支持对我有什么帮助?
我可以在另一个线程中的 clear() 发生之前将一个元素添加到列表中。
除非我自己管理锁(我真的不需要同步列表)。
【问题讨论】:
-
正如所有三个答案所述,同步列表意味着该列表上的所有操作都保证是原子的或保证对单个方法调用的串行访问。我不得不问我的同事这是什么意思。所以这意味着 List 上的操作(来自上面的代码 sn-p)
synchronizedList.size()和synchronizedList.add(s)不能并行。这对于一些正在阅读此线程的人来说并不明显。因此,尽管添加以帮助其他不理解的人。感谢@WhiteFang34、@jb-nizet 和 @khachik 的解释。
标签: java synchronized