加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么notify方法应该在synchronized块中?

发布时间:2020-12-14 19:17:32 所属栏目:Java 来源:网络整理
导读:请考虑以下代码: class CalculateSeries implements Runnable{ int total; public void run(){ synchronized(this){ // *LINE 1* for(int i = 1; i 另一个类通过在同步块内获取锁定来等待此类的实例.但是如果我没有在同步块中保存run方法中的代码,那么我会

请考虑以下代码: –

class CalculateSeries implements Runnable{
    int total;
    public void run(){
        synchronized(this){                          // *LINE 1* 
            for(int i = 1; i <= 10000; i++) {
                total += i;
            }

            notify(); //Notify all the threads waiting on this instance of the class to wake up
        }
    }
} 

另一个类通过在同步块内获取锁定来等待此类的实例.但是如果我没有在同步块中保存run方法中的代码,那么我会得到IllegalMonitorStateException.

notify()应该意味着向所有等待的线程发出信号.那为什么它应该在同步块内呢?

最佳答案

notify() should mean to give signal to all the threads waiting.

实际上,没有.它标志着一个任意选择的等待线程. notifyAll()发出所有信号.

Then why should it be inside synchronized block?

因为等待不是为了它自己而发生的.你检查一个条件,如果没有达到,你就等到有人告诉你它现在可以满足(然后再检查).如果没有同步,您将在检查条件和实际等待之间遇到竞争条件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读