【发布时间】:2017-09-16 21:33:04
【问题描述】:
我对同步方法感到困惑。看下面这段代码:
public void waitOne() throws InterruptedException
{
synchronized (monitor)
{
while (!signaled)
{
monitor.wait();
}
}
}
public void set()
{
synchronized (monitor)
{
signaled = true;
monitor.notifyAll();
}
}
现在,据我了解,同步意味着只有 1 个线程可以访问里面的代码。如果 waitOne() 被 主线程 调用并且 set() 被 子线程 调用,那么(从据我了解)它会造成死锁。
这是因为 主线程 永远不会退出 同步(监视器),因为 while (!signaled) { monitor.wait(); },因此从子线程调用 set() 将永远无法进入同步(监控)?
我说的对吗?还是我错过了什么?完整代码在这里:What is java's equivalent of ManualResetEvent?
谢谢
【问题讨论】:
-
如果您在用于同步的对象上调用
wait,它将允许另一个线程访问该对象。这段代码不会死锁 -
啊……我明白了……谢谢 0xDEADC0DE。请在上面发帖,我会接受你的回答:)
标签: java android multithreading wait notify