1. 程式人生 > >第二部分 執行緒的等待和喚醒

第二部分 執行緒的等待和喚醒

從這個圖中可以看出,等待狀態是一種特殊的狀態。使執行緒陷入等待實際上是暫時剝奪執行緒當前擁有的CPU時間片和獲取CPU時間片的資格,使其返回到就緒狀態。除非被喚醒,否則等待時間已滿,該執行緒將一直等待。不會被JVM執行緒排程器選中並賦予CPU時間片。處於等待的執行緒一旦恢復執行,與其他處於就緒狀態被執行緒排程器選中的執行緒不同,將從上次結束執行的斷點處開始執行,而非從頭開始。

 使執行緒中斷執行,返回就緒狀態的手段是呼叫java.lang.Object物件的wait()方法;喚醒處於等待狀態的執行緒的手段是呼叫java.lang.Object物件的notify()方法

為了加深理解,下面就通過具體例子來說明執行緒等待和喚醒

第一個:

通過繼承Thread來建立子執行緒。

執行效果如下:

第二個:

通過實現Runnable介面來建立子執行緒

執行效果如下:

第三個:

通過實現Runnable,又通過Object物件的notifyAll()方法一次性喚醒多個同一個物件創造的執行緒。

執行效果如下:

總結:1).利用Thread.sleep().使執行緒開始休眠指定的時間,以便讓各個子執行緒進入等待狀態。

      2).synchronized同步鎖的使用。這一塊在後面文章中會加以解說。