当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:15:00  来源:本站整理

Java多线程筹划情势 - wait/notify机制[Java编程]

赞助商链接



  本文“Java多线程筹划情势 - wait/notify机制[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

普通,多线程之间需求调和工作.比方,浏览器的一个显示图片的线程 displayThread想要履行显示图片的任务,必须等候下载线程downloadThread将 该图片下载完毕.假如图片还没有下载完,displayThread可以暂停,当 downloadThread完成了任务后,再告诉displayThread“图片预备完毕,可 以显示了”,这时,displayThread持续履行.

以上逻辑简单的说就是:假如条件不满意,则等候.当条件满意时,等候该 条件的线程将被唤醒.在Java中,这个机制的实现依靠于wait/notify.等候机 制与锁机制是密切关联的.比方:

synchronized(obj) {
while(!condition) {
obj.wait();
}
obj.doSomething();
}

当线程A得到了obj锁后,发现条件condition不满意,无法持续下一处理,于 是线程A就wait().

在另一线程B中,假如B更改了某些条件,使得线程A的condition条件满意了 ,便可以唤醒线程A:

synchronized(obj) {
condition = true;
obj.notify();
}

需求注意的概念是:

◆调用obj的wait(), notify()办法前,必须得到obj锁,也就是必须写在 synchronized(obj) {...} 代码段内.

◆调用obj.wait()后,线程A就释放了obj的锁,不然线程B无法得到obj锁, 也就无法在synchronized(obj) {...} 代码段内唤醒A.

◆当obj.wait()办法返回后,线程A需求再次得到obj锁,才能持续履行.

◆假如A1,A2,A3都在obj.wait(),则B调用obj.notify()只能唤醒A1,A2,A3中 的一个(具体哪一个由JVM决意).

◆obj.notifyAll()则能全部唤醒A1,A2,A3,但是要持续履行obj.wait()的下 一条语句,必须得到obj锁,因此,A1,A2,A3只有一个有机会得到锁持续履行, 比方A1,别的的需求等候A1释放obj锁之后才能持续履行.

◆当B调用obj.notify/notifyAll的时刻,B正持有obj锁,因此,A1,A2,A3虽 被唤醒,但是仍无法得到obj锁.直到B退出synchronized块,释放obj锁后, A1,A2,A3中的一个才有机会得到锁持续履行.


  以上是“Java多线程筹划情势 - wait/notify机制[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .