2

可以说我有以下列表:

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

如果我做这样的事情:

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

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

4

2 回答 2

4

...或者如果其他一些线程引用了列表中的某些对象可以修改它?

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

于 2013-09-04T10:05:26.120 回答
0
synchronized(myObjectsList )
{
  //some code runs here...
}

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

于 2013-09-04T10:28:16.523 回答