同步列表与列表中的同步对象

时间:2013-09-04 10:03:19

标签: java synchronization thread-safety

假设我有以下列表:

List<MyObject> myObjectsList = new ArrayList<>();

如果我做这样的事情:

synchronized(myObjectsList )
{
  //some code runs here...
}

是否意味着列表中的每个对象都是线程安全的,或者如果某个其他线程对列表中的某些对象有引用可以修改它?

2 个答案:

答案 0 :(得分:4)

  

...或者如果某个其他线程引用了一些内部对象   列表可以修改吗?

是的,他们可以修改对象,因为他们可以锁定MyObject个实例。

答案 1 :(得分:0)

synchronized(myObjectsList )
{
  //some code runs here...
}

此代码的作用仅是获取列表中的唯一锁。这就是它所做的一切。因此,这不会阻止其他代码在您的列表中执行任何操作。从字面上看,一切都可以完成。但是,当您的其他并发代码也尝试获取锁定时(即:它也被同一synchronized上的myObjectsList语句包围),它将阻塞,直到锁被释放为止拥有锁的synchronized块。