我定义了一个Map<String,List>的数据结构,由于担心List中的同步问题,使用了Collections.synchronizedList(List)
并且遵从他的建议:
返回指定列表支持的同步(线程安全的)列表。为了保证按顺序访问,必须通过返回的列表完成所有对底层实现列表的访问。
在返回的列表上进行迭代时,用户必须手工在返回的列表上进行同步:
List list = Collections.synchronizedList(new ArrayList());
...
synchronized(list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
但是当我把代码写好了之后,编译器却警告我:synchronization on local variable or method parameter
我是否应该忽略这个警告呢?使用一个本地变量来进行同步是不妥当的?有没有一些折中的方式来解决这一问题呢?