Joh*_*n11 2 java synchronization synchronized
一段时间以来,我在脑海中有一个问题:当多个线程可以访问列表时,同步访问列表(ArrayList ...)的安全性如何?在列表本身上进行同步是否更安全,或者创建一个锁定对象并在其上进行同步更安全?
无需自己进行同步。收藏框架已经做到了。只是利用它。
List list = Collections.synchronizedList(yourList);
Run Code Online (Sandbox Code Playgroud)
并使用返回的list。记住方法
返回由指定列表支持的同步(线程安全)列表。
我相信这就是您想要的。可能有2种情况(最终):
您使用单独的锁进行同步。
someMethod(){
synchronized(lock){
// code to access/modify List here
}
}
Run Code Online (Sandbox Code Playgroud)
您直接在List实例上同步
synchronized(list)
{
// code to access/modify list here
}
Run Code Online (Sandbox Code Playgroud)
如果是访问列表的唯一方法,则第一种情况是安全someMethod()的。来自不同流的任何其他线程都可以修改实际列表。
第二种情况锁定了实际的列表实例,因此,始终保证您一次只有一个线程访问/修改列表。