小编scu*_*gxl的帖子

为什么我们必须使用"while"来检查竞争条件而不是"如果"

我在"Thinking in java"中阅读了以下代码.

synchronized(obj)
    {
        while (condition_not_matched)
        {
            obj.wait();
        }
        //continue
        dosomething();

    }
Run Code Online (Sandbox Code Playgroud)

我的想法:
使用"if"是可以的,因为"等待"意味着它必须得到obj的锁定监视器,并且这里只能执行一个线程.

(1)为什么这里使用"while(condition)"而不是"if"?
(2)执行"obj.wait()"时发生了什么?currrent线程是否释放了"obj"的锁定?
(3)当另一个线程执行"obj.notify()"时,前一个线程发生了什么(它是否重新获取了obj的锁定?如果是,它必须是condition_not_matched,所以"如果"就足够了.)
我是错误?

java multithreading while-loop wait

6
推荐指数
2
解决办法
2252
查看次数

标签 统计

java ×1

multithreading ×1

wait ×1

while-loop ×1