【发布时间】:2020-05-18 15:44:54
【问题描述】:
我有一个列表,每 20 毫秒在一个线程上更新一次,每 16 毫秒在另一个线程上读取一次。我听说在这种情况下,通常最好使用同步列表而不是copyonwritearraylist,对吗?
我应该把这个列表初始化为
List<Object> list = Collections.synchronizedList(new ArrayList<Object>());
?
或者我应该将其设为常规列表,然后每次我想从中读取时使用诸如
之类的方法public List<Object> synList(ArrayList<Object> list) {
return Collections.synchronizedList(list);
}
对不起,如果这是微不足道的,我真的不确定。非常感谢
【问题讨论】:
-
第一个选项。
-
第二个没用。仅当对底层列表的所有访问也在同一事物上同步时,同步列表才有用;基本上,使用它的唯一安全方法是在创建时立即包装列表,即第一种方式。
-
@AndyTurner 有没有办法对这些同步列表/地图进行简单测试?
-
@Faraz 取决于您要测试的内容。
-
@AndyTurner 我会查一下。不过谢谢
标签: java list arraylist thread-safety synchronized