与本地对象同步

synchronized with local object

本文关键字:同步 对象      更新时间:2023-10-16

我刚刚阅读了一些代码,并注意到有一些代码同步了一个本地对象。有人可以告诉我当我们这样做时这意味着什么,因为我们只是创建了一个新的本地对象,我们为什么要锁定它?

list queue;
...
public send()
{
    entry = waitEntry();
    //add this object into the list
    queue.add(entry);
    ...
    synchronized( entry )
    {
        //do some sth
        entry.wait();
    }
}

然后,当我们收到响应时,解锁此对象

public receive()
{
    entry = list.get() <-- get the object we have sent before
    synchronized( entry )
    {
        entry.notify()
    }
}

如您所见,我之前已经锁定了"条目",如何在 receive() 方法中再次锁定它?

谢谢大家。

如果您有多个正在运行的线程将访问相同的资源,则可能会遇到一些并发问题,在您的示例中,第一个线程会将条目添加到队列中,然后该线程必须等待其他代码影响他对此资源的操作。由于两个线程同时执行,因此 receive 方法可能会读取处于错误状态的条目 ressource(在 send 方法对 ressource 执行之前)。

这就是我的理解,我可能是错的。如果你想了解更多关于这类问题的信息,你应该阅读关于并发的文章