我刚读了一些代码,并注意到有一些代码用于同步本地对象。有人告诉我,当我们创建一个新的本地对象时,它的含义是什么,我们为什么要锁定它?
/:dynamicVariable/
然后,当我们收到回复时,解锁此对象
list queue;
...
public send()
{
entry = waitEntry();
//add this object into the list
queue.add(entry);
...
synchronized( entry )
{
//do some sth
entry.wait();
}
}
如您所见,我之前已经锁定了'条目',如何在receive()方法中再次锁定它?
谢谢大家。
答案 0 :(得分:0)
如果你有多个运行线程可以访问同一个ressource,你可能会遇到一些并发问题,在你的例子中,第一个线程会将条目添加到队列中,然后这个线程必须等待其他代码影响他的动作在这个资源上。由于两个线程是同时执行的,因此receive方法可以在错误的状态下读取条目ressource(在send方法对ressource执行之前)。
这就是我的理解,我可能是错的。 如果您想了解有关此类问题的更多信息,请阅读有关concurrency
的文章