龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

wait,notify,sleep,join和线程同步问题(续)

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
昨天没有时间写完这篇,今天补上,前面只说明了wait和notify这两个方法,这里讨论一下sleep和join,说实在的这两个方法比wait和notify简单的多. http://blog.csdn.net/treeroot/archive/2004/11/10/175508.ASPx

  昨天没有时间写完这篇,今天补上,前面只说明了wait和notify这两个方法,这里讨论一下sleep和join,说实在的这两个方法比wait和notify简单的多.
  http://blog.csdn.net/treeroot/archive/2004/11/10/175508.ASPx

  sleep:Thread的静态方法,当前线程休眠一段时间,时间到了再恢复可运行状态,时间到了不一定就执行吧,还得竞争CPU呢.

  join:这个方法其实就是非凡的wait,wait方法一般都需要别人notify(当然也可以设置超时),但是join方法就不需要别人notify了,一直等到这个线程死亡(就相当于这个线程临时前告诉那些在等它的人:你们进来吧!)

  本人不是很会举例子,还是两个人公用一个卫生间吧,这回不刷牙了,改洗澡吧,总不能两个人同时洗澡吧!就算可以,这里假设不可以吧.情况时这样的:A在洗澡,B要等。

  第一种情况:
  B很聪明的,A洗澡可能要20分钟到1小时,我就先睡10分钟看看好了没有,没有好就再睡10分钟,最多多等10分钟而已吧.
  

class Syn
  {
          public static void main(String[] args) throws Exception
         {
                 Thread a=new Bathing();
                  a.start();
                  //B
                  int time=0;
                  while(a.isAlive()){
                          Thread.sleep(10000);
                          time+=10;
                          System.out.println("B has waited "+time+" minutes");
                  }
                  System.out.println("B can bath now!");
          }
  }

class Bathing extends Thread
  {
          public void run(){
                  bathing();
          }
          private void bathing() {
                  System.out.println("A is bathing !");
                  try{Thread.sleep(20000);}catch(InterruptedException e){e.printStackTrace();}
                  //延迟20秒看效果
                  System.out.println("A has bathed !");
  
  

精彩图集

赞助商链接