Java 中 wait错英、sleep 和 yield 的區(qū)別

wait

  • wait 是 Object 類的實(shí)例方法菠秒,用于線程間通信
  • wait() 方法導(dǎo)致當(dāng)前線程進(jìn)入等待狀態(tài)并釋放對象的鎖秉宿,直到它被通知(其他線程調(diào)用 notify 或 notifyAll 方法戒突。notify / notifyAll 方法解除等待線程的阻塞狀態(tài))
  • wait(long timeout) 方法導(dǎo)致當(dāng)前線程釋放對象的鎖,并進(jìn)入等待狀態(tài)直到它被通知或者經(jīng)過指定的時間
  • wait() 和 wait(long timeout) 被喚醒后會進(jìn)入阻塞狀態(tài)(Blocked)描睦,直到獲得鎖膊存,才進(jìn)入就緒態(tài)(Runnable)
  • wait() 方法只能在同步方法或同步代碼塊中調(diào)用。如果當(dāng)前線程不是對象鎖的持有者,該方法拋出一個 IllegalMonitorStateException 異常
  • 可以通過 interrupt() 方法打斷線程的暫停狀態(tài)隔崎,從而使線程立刻拋出 InterruptedException(但不建議使用該方法)今艺,被 interrupt 以后會釋放鎖
  • 不需要捕獲異常

sleep

  • sleep 是 Thread 類的靜態(tài)方法,作用是阻塞當(dāng)前線程爵卒,讓出 CPU 的使用
  • 用于短時間暫停當(dāng)前線程
  • sleep(long millis) 使當(dāng)前線程進(jìn)入停滯狀態(tài)虚缎,所以執(zhí)行 sleep() 的線程在指定的時間內(nèi)肯定不會被執(zhí)行
  • sleep(long millis) 可能使任意優(yōu)先級的其他線程得到執(zhí)行機(jī)會
  • sleep(long millis) 不會釋放鎖
  • 調(diào)用 sleep 方法的線程在喚醒之后不保證能獲取到 CPU,它會先進(jìn)入就緒態(tài)(Runnable)钓株,與其他線程競爭 CPU
  • 可以通過 interrupt() 方法打斷線程的暫停狀態(tài)实牡,從而使線程立刻拋出 InterruptedException(但不建議使用該方法),被 interrupt 以后會釋放鎖
  • 需要捕獲異常
/**
 * Thread sleep和wait區(qū)別
 */
public class ThreadTest implements Runnable {
    int number = 10;

    public void firstMethod() throws Exception {
        synchronized (this) {
            number += 100;
            System.out.println(number);
        }
    }

    public void secondMethod() throws Exception {
        synchronized (this) {
            /**
             * (休息 2s轴合,阻塞線程)
             * 以驗(yàn)證當(dāng)前線程對象的機(jī)鎖被占用時创坞,
             * 是否被可以訪問其他同步代碼塊
             */
            Thread.sleep(2000);
            // this.wait(2000);
            number *= 200;
        }
    }

    @Override
    public void run() {
        try {
            firstMethod();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        ThreadTest threadTest = new ThreadTest();
        Thread thread = new Thread(threadTest);
        thread.start();
        threadTest.secondMethod();
    }
}

運(yùn)行結(jié)果:

Thread.sleep(2000): 2100
this.wait(2000): 110

yield

  • yield 是 Thread 類的靜態(tài)方法,沒有參數(shù)受葛,使當(dāng)前線程從運(yùn)行狀態(tài)變?yōu)榫途w態(tài)
  • yield 方法使當(dāng)前線程讓出 CPU题涨,但讓出的時間是不可設(shè)定的
  • yield 方法不會釋放鎖
  • yield 會把 CPU 讓給相同優(yōu)先級的其他線程,而不會把 CPU 給更高或更低優(yōu)先級的其他線程总滩。若此時沒有其他線程跟它在有一個優(yōu)先級纲堵,則該線程繼續(xù)獲得 CPU 時間,因此可能某線程剛調(diào)用 yield 方法又馬上被執(zhí)行
  • 不需要捕獲異常
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闰渔,一起剝皮案震驚了整個濱河市席函,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌澜建,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝌以,死亡現(xiàn)場離奇詭異炕舵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)跟畅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門咽筋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人徊件,你說我怎么就攤上這事奸攻。” “怎么了虱痕?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵睹耐,是天一觀的道長。 經(jīng)常有香客問我部翘,道長硝训,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮窖梁,結(jié)果婚禮上赘风,老公的妹妹穿的比我還像新娘。我一直安慰自己纵刘,他們只是感情好邀窃,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著假哎,像睡著了一般瞬捕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上位谋,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天山析,我揣著相機(jī)與錄音,去河邊找鬼掏父。 笑死笋轨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赊淑。 我是一名探鬼主播爵政,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼陶缺!你這毒婦竟也來了钾挟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤饱岸,失蹤者是張志新(化名)和其女友劉穎掺出,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苫费,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汤锨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了百框。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闲礼。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖铐维,靈堂內(nèi)的尸體忽然破棺而出柬泽,到底是詐尸還是另有隱情,我是刑警寧澤嫁蛇,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布锨并,位于F島的核電站,受9級特大地震影響睬棚,放射性物質(zhì)發(fā)生泄漏琳疏。R本人自食惡果不足惜有决,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望空盼。 院中可真熱鬧书幕,春花似錦、人聲如沸揽趾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篱瞎。三九已至苟呐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俐筋,已是汗流浹背牵素。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留澄者,地道東北人笆呆。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像粱挡,于是被迫代替她去往敵國和親赠幕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容