Java多線程中Sleep與Wait的區別

來源:互聯網
上載者:User

標籤:

Java中的多線程是一種搶佔式的機制,而不是分時機制。搶佔式的機制是有多個線程處於可運行狀態,但是只有一個線程在運行。

共同點:

1. 他們都是在多線程的環境下,都可以在程式的調用處阻塞指定的毫秒數,並返回。

2. wait()和sleep()都可以通過interrupt()方法 打斷線程的暫停狀態 ,從而使線程立刻拋出InterruptedException。

   如果線程A希望立即結束線程B,則可以對線程B對應的Thread執行個體調用interrupt方法。如果此刻線程B正在wait/sleep/join,則線程B會立刻拋出InterruptedException,在catch() {} 中直接return即可安全地結束線程。

   需要注意的是,InterruptedException是線程自己從內部拋出的,並不是interrupt()方法拋出的。對某一線程調用 interrupt()時,如果該線程正在執行普通的代碼,那麼該線程根本就不會拋出InterruptedException。但是,一旦該線程進入到 wait()/sleep()/join()後,就會立刻拋出InterruptedException 。

不同點:

1. Thread類的方法:sleep(),yield()等

  Object的方法:wait()和notify()等

2. 每個對象都有一個鎖來控制同步訪問。Synchronized關鍵字可以和對象的鎖互動,來實現線程的同步。

  sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。

3. wait,notify和notifyAll只能在同步控制方法或者同步控制塊裡面使用,而sleep可以在任何地方使用

4. sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常  

線程的調度

    線程調度器按線程的優先順序高低選擇高優先順序線程(進入運行中狀態)執行,同時線程調度是搶先式調度,即如果在當前線程執行過程中,一個更高優先順序的線程進入可運行狀態,則這個線程立即被調度執行。

搶先式調度又分為:時間片方式和獨佔方式。在時間片方式下,當前活動線程執行完目前時間片後,如果有其他處於就緒狀態的相同優先順序的線程,系統會將執行權交給其他就緒態的同優先順序線程;當前活動線程轉入等待執行隊列,等待下一個時間片的調度。

在獨佔方式下,當前活動線程一旦獲得執行權,將一直執行下去,直到執行完畢或由於某種原因主動放棄CPU,或者是有一高優先順序的線程處於就緒狀態。

舉例說明

        首先我想說的是:在多線程編程中,經常會使用sleep與wait操作,我們理解sleep與wait的最大區別是sleep等待是不會釋放當前鎖,而wait則反之。我今天想到一個現執行個體子來比較這兩者的區別。
        我以去火車站買票的例子來說明。我們去火車站買票,當站到售票視窗前要告訴售票員需要到哪裡的票,什麼時候發車的,售票員就通過電腦去給我們列印票,這個時候我們就得等待。如果我們用sleep模式,就得一直站在那裡等,直到售票員給我們票;如果用wait模式,這個時候就離開我們所站的位置,後面的票友就可能站到我當前的位置(視窗前),我們要取票的話,就得重新排在隊伍後面去取票。

Java多線程中Sleep與Wait的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.