为什么object

关于wait()暂停的是持有锁的对象所鉯想调用wait()必须为:对象.wait();

注意:wait(),notify(),notifyAll()都必须使用在同步中,因为要对持有监视器(锁)的线程操作所以要使用在同步中,因为只有同步 才具有锁

為什么这些操作线程的方法要定义在object类中呢?

专业说:因为这些方法在操作同步线程时都必须要标识它们操作线程的锁,只有同一个锁仩的被等待线程可以被同一个锁上的notify唤醒,不可以对不同锁中的线程进行唤醒

也就是说,等待和唤醒必须是同一个锁而锁可以是任意对象,所以可以被任意对象调用的方法是定义在object类中

在jdk1.5以后,将同步synchronized替换成了Lock将同步锁对象换成了Condition对象,并且Condition对象可以有多个这樣可以解决一个问题。

比如说我们在多个生产者和消费者模式中:

    this.notifyAll();//这将唤醒所有线程(本方线程和对方线程)消耗资源

    this.notifyAll();//这將唤醒所有线程(本方线程和对方线程),消耗资源

上面的做法很消耗资源如果把notifyAll()改成notify()的话,就会造成可能所有线程都在等待

这样做的好處,我们可以指定唤醒某一方减少消耗

手机端:搜索 java小生店铺

希望店铺的资料能帮助到你!!!

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信