程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> wait,notify,sleep,join和線程同步問題(續)

wait,notify,sleep,join和線程同步問題(續)

編輯:JAVA編程入門知識

  昨天沒有時間寫完這篇,今天補上,前面只說明了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 !");
  
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved