搜尋
首頁JavaJava面試題面試官:請你說sleep()、wait()、join()和yield()的差別

面試官:請你說sleep()、wait()、join()和yield()的差別

我們先來介紹下鎖定池與等待池的概念。

首先來看下鎖定池的概念

所有需要競爭同步鎖定的執行緒都會放在鎖定池當中,例如目前物件的鎖定已經被其中一個執行緒得到,則其它執行緒需要在這個鎖池進行等待,當前面的執行緒釋放同步鎖侯鎖池中的執行緒去競爭同步鎖,當某個執行緒得到後會進入就緒佇列進行等待cpu資源分配。

接著來看看等待池的概念

當我們呼叫wait() 方法後,執行緒會放到等待池中,等待池的執行緒是不會去競爭同步鎖定。只有呼叫了notify() 或notifyAll() 後等待池的線程才會開始去競爭鎖,notify() 是隨機從等待池選出一個線程放到鎖池,而notifyAll() 是將等待池的所有線程放到鎖池當中。

  • sleep 是 Thread 類別的靜態本機方法,wait 則是Object的本機方法。

  • sleep 方法不會釋放lock,但wait 會釋放,而且會加入到等待佇列。

sleep就是把cpu的执行资格和执行权释放出去,不再运行此线程,当定时事件结束再取回cpu资源,参与cpu的调度,获取到cpu资源后就可以继续运行了,而如果sleep时该线程有锁,那么sleep不会释放这个锁,而是把锁带着进入了冻结状态,也就是说其它需要这个锁的线程根本不可能获取到这个锁。也就是说无法执行程序,如果在睡眠期间其它线程调用了这个线程的interrupt方法,那么这个线程也会抛出interruptexception异常返回,这点和wait是一样的。
  • sleep方法不依賴同步器synchronized,但wait需要依賴synchronized關鍵字。

  • sleep不需要被喚醒(休眠之後退出阻塞),但wait需要(不指定時間需要被別人中斷)。

  • sleep一般用於目前執行緒休眠,或輪詢暫停操作,wait則多用於多執行緒之間的通訊。

  • sleep會讓出CPU執行時間且強制上下文切換,而wait則不一定,wait後可能還是有機會重新競爭到鎖定繼續執行的。

yield() 執行後執行緒直接進入就緒狀態,馬上釋放了cpu的執行權,但是依然保留了cpu的執行資格,所以由可能cpu下次進行執行緒調度還會讓這個線程獲取到執行權繼續執行。

(學習影片分享:java影片教學

join() 執行後執行緒進入阻塞狀態,例如在執行緒B中呼叫執行緒A的join() ,那線程B會進入到阻塞隊列,指導線程A結束或中斷線程。

public static void main(String[] args) throws InterruptedException {
        Thread t1=new Thread(()->{
            try {
                Thread.sleep(4000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("休眠sleep线程");
        });
        t1.start();
        t1.join();
        System.out.println("线程执行完成");
    }

原文連結:https://blog.csdn.net/lxn1023143182/article/details/114134498

相關推薦:java訪談問題及答案

以上是面試官:請你說sleep()、wait()、join()和yield()的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:csdn。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中