线程的休眠与等待 区别(转)

来源:互联网 发布:王江民38岁开始学编程 编辑:程序博客网 时间:2024/06/05 21:49

关于线程间的交互和共享数据通常有轮询和通知机制。一下举例说明:Thread1和Thread2共享一块数据ShareData,Thread1使用数据,Thread2更新数据。当Thread1使用数据时发现数据没有更新就可以先休眠(sleep())一段时间然后再去判断是否更新,如此反复直到数据可用,这就是所述的轮询机制。可以看出轮询机制需要不断的轮询数据状态,很耗费资源;当采用通知机制时过程是这样的,Thread1发现数据不可用就在ShareData上等待(ShareData.wait()),当Thread2更新数据后就通知所有在ShareData上等待的线程(ShareData.notifyAll()),这样Thread1受到通知继续运行。

关于等待和休眠还有另一个区别就是当线程等待时,该线程锁定的资源是释放掉的,这时其它线程是可以锁定这些资源的,当线程被唤醒或者等待时限到时线程重新获取资源才能继续运行;而当线程休眠时线程锁定的资源是不被释放的。

还有一点就是要在对象lock上等待时是必须先要获取lock的对象锁才能进行的,即必须要类似下面的逻辑synchronized(lock){ lock.wait()}

以下为一个简单的示例:

package  sinpo.usagedemo;/**  * 该例子说明线程休眠与等待以及注意事项。  *   *  @author  徐辛波(sinpo.xu@hotmail.com)   * Oct 22, 2008  */public class  PendingThreadDemo  {     public  Console console =  new  Console () ;     private  void  writeToConsole1 () {         synchronized ( console ){             try  {                 Thread.sleep ( 1  *  1000 ) ; //NOTE:sleep时并未释放console别的线程是不能锁定console的                 //TODO do things             }  catch  ( InterruptedException e ) {                 e.printStackTrace () ;             }         }     }         private  void  writeToConsole2 () {         synchronized ( console ){             try  {                 console.wait ( 1 * 1000 ) ; //NOTE:wait时别的线程是可以锁定console的                 //TODO do things             }  catch  ( InterruptedException e ) {                 e.printStackTrace () ;             }         }     }}//控制台类class  Console  {     //TODO implements me} 


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃香蕉吃的胃难受怎么办 qq糖卡在喉咙里怎么办 头发上粘到了qq糖怎么办 老房子土墙掉土怎么办 速写画的太慢怎么办 艺术生文化课没过线怎么办 5岁儿童坐飞机忘带证件怎么办 儿童坐飞机没带证件怎么办 儿童坐飞机没带户口本怎么办 儿童坐飞机没有带户口本怎么办 刚打蜡的车下雨怎么办 飞机票不能退票不能改签怎么办 深圳航空买机票姓名错了怎么办 大众cc打不着火怎么办 手上扎了仙人掌刺怎么办 pscs5界面字体太小怎么办 儿童做飞机没带户口本怎么办 黑户口想做飞机怎么办 宝宝坐飞机忘记带证件怎么办 值机柜台关闭了怎么办 值机迟到几分钟怎么办 婴儿坐飞机没带证件怎么办 飞机票买了一天降价1000怎么办 社保卡磁性没了怎么办 社保卡民族错了怎么办 坐飞机婴儿出生证明没带怎么办 手提行李超过5kg怎么办 随身行李超过5kg怎么办 南航机票填错身份证怎么办 两岁宝宝坐着驼背怎么办 两岁的宝宝坐晕车怎么办 在机场丢东西了怎么办 孩子放学不按时回家怎么办?转 右腿比左腿粗2cm怎么办 八个月宝宝小腿弯怎么办 南航航班取消了怎么办 高铁不能送老人怎么办 小孩买火车票没有身份证怎么办 断奶后孩子瘦了怎么办 两岁宝宝坐飞机哭闹怎么办 八个月宝宝坐飞机哭闹怎么办