黑马程序员技术交流社区

标题: 多线程的等待唤醒机制 [打印本页]

作者: zclove898    时间: 2011-12-19 16:42
标题: 多线程的等待唤醒机制
本帖最后由 zclove898 于 2011-12-19 17:16 编辑

对多线程的等待唤醒机制的概念的理解还是有点模糊,希望能通俗的讲解一下
作者: 宋双    时间: 2011-12-19 16:53
简单说就是:如果条件不满足,则等待。当条件满足时,等待该条件的线程将被唤醒。

作者: 余松霖    时间: 2011-12-19 16:56
我在网上找的.希望能帮助你:

    一本书同时只能借给一个人。现在有一本书,图书馆已经把这本书借了张三。

    在简单的synchrnozed 同步机制下,李四如果想借,先要去图书馆查看书有没有还回来。李四是个心急的人,他每天都去图书馆查;而张三看书看得慢,过了半个月才把书还回来,结果李四在这半个月里全都白跑了,浪费了不少交通车费

    而如果使用wait/notify机制,李四就不用白忙了。他第一次去图书馆时发现书已借走,就回家静静等待(wait);张三把书还掉后,通知(notify)李四,李四去图书馆拿书即可。整个过程中,李四没有白跑,没浪费钱。

    回到计算机世界:
   
       书           --  临界资源,需互斥地访问
    张三,李四      --  两个竞争的线程
坐车去图书馆查书   --  轮询
      车费          --  CPU空间
      等待          --  wait
  通知下一个借书者   --  notify

    也就是说,若使用简单的synchonized机制实现互斥,会导致线程主动发起轮询,若N次轮询没有成功,就产生了N次的CPU空间浪费;如果加上了 wait/notify机制,就可以避免这些无谓的轮询,节省CPU的消耗。
作者: 窦超    时间: 2011-12-19 17:06
条件满足就唤醒,否则就等待




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2