成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java中wait()與sleep()的區(qū)別

seanHai / 2263人閱讀

摘要:期間對(duì)象鎖是釋放的調(diào)用的時(shí)候鎖并沒有被釋放,調(diào)用也屬于這種情況一般而言,用于線程間的通信,用于線程狀態(tài)的控制參考資料

  

最近在做面試題的時(shí)候看到這道題,復(fù)習(xí)了一遍《Thinking in Java》,在此記錄這個(gè)答案

類的區(qū)別

wait()來自于 java.lang.Object,任何對(duì)象都有此方法

sleep()來自于 java.lang.Thread,調(diào)用的對(duì)象為線程

用法上的區(qū)別

看一下jdk的描述:

  

wait():Causes the current thread to wait until either another thread invokes the
java.lang.Object.notify() method or the java.lang.Object.notifyAll()method for this object, or a specified amount of time has elapsed.

使當(dāng)前線程掛起,當(dāng)對(duì)象調(diào)用java.lang.Object.notify()或者java.lang.Object.notifyAll()或者時(shí)間到期,則從wait()中恢復(fù)執(zhí)行

  

sleep():Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers. The thread does not lose ownership of any monitors.

在指定的時(shí)間內(nèi)使當(dāng)前執(zhí)行的線程睡眠(暫停執(zhí)行)

同步與鎖的不同

wait()與sleep()最主要的區(qū)別就在于同步與鎖,wiat()必須放在synchronized block中,否則會(huì)在program runtime時(shí)扔出java.lang.IllegalMonitorStateException異常。

wait()期間對(duì)象鎖是釋放的

調(diào)用sleep()的時(shí)候鎖并沒有被釋放,調(diào)用yield()也屬于這種情況

synchronized(LOCK) {   
    Thread.sleep(1000); // LOCK is held
}

synchronized(LOCK) {   
    LOCK.wait(); // LOCK is not held
}

一般而言,wait()用于線程間的通信,sleep()用于線程狀態(tài)的控制

參考資料

http://stackoverflow.com/questions/1036754/difference-between-wait-and...
http://howtodoinjava.com/2013/03/08/difference-between-sleep-and-wait/
http://www.qat.com/using-waitnotify-instead-thread-sleep-java/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64300.html

相關(guān)文章

  • sleep( ) 和 wait( ) 這 5 個(gè)區(qū)別,你知道幾個(gè)?

    摘要:休眠和等待方法是多線程中常用的兩個(gè)方法,它們有什么區(qū)別及一些該注意的地方有哪些呢下面給大家一一分解。區(qū)別使用場景一般用于當(dāng)前線程休眠,或者輪循暫停操作,則多用于多線程之間的通信。 sleep(休眠) 和 wait(等待) 方法是 Java 多線程中常用的兩個(gè)方法,它們有什么區(qū)別及一些該注意的地方有哪些呢?下面給大家一一分解。 區(qū)別1:使用限制 使用 sleep 方法可以讓讓當(dāng)前線程休眠...

    EscapedDog 評(píng)論0 收藏0
  • Java 多線程核心技術(shù)梳理(附源碼)

    摘要:本文對(duì)多線程基礎(chǔ)知識(shí)進(jìn)行梳理,主要包括多線程的基本使用,對(duì)象及變量的并發(fā)訪問,線程間通信,的使用,定時(shí)器,單例模式,以及線程狀態(tài)與線程組。源碼采用構(gòu)建,多線程這部分源碼位于模塊中。通知可能等待該對(duì)象的對(duì)象鎖的其他線程。 本文對(duì)多線程基礎(chǔ)知識(shí)進(jìn)行梳理,主要包括多線程的基本使用,對(duì)象及變量的并發(fā)訪問,線程間通信,lock的使用,定時(shí)器,單例模式,以及線程狀態(tài)與線程組。 寫在前面 花了一周時(shí)...

    Winer 評(píng)論0 收藏0
  • bat等大公司常考java多線程面試題

    摘要:典型地,和被用在等待另一個(gè)線程產(chǎn)生的結(jié)果的情形測試發(fā)現(xiàn)結(jié)果還沒有產(chǎn)生后,讓線程阻塞,另一個(gè)線程產(chǎn)生了結(jié)果后,調(diào)用使其恢復(fù)。使當(dāng)前線程放棄當(dāng)前已經(jīng)分得的時(shí)間,但不使當(dāng)前線程阻塞,即線程仍處于可執(zhí)行狀態(tài),隨時(shí)可能再次分得時(shí)間。 1、說說進(jìn)程,線程,協(xié)程之間的區(qū)別 簡而言之,進(jìn)程是程序運(yùn)行和資源分配的基本單位,一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程.進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元...

    Charlie_Jade 評(píng)論0 收藏0
  • 一起學(xué)并發(fā)編程 - sleepwait差異

    摘要:一般差異簡單來說,是一個(gè)用于線程同步的實(shí)例方法。暫停當(dāng)前線程,不釋放任何鎖。用來線程間通信,使擁有該對(duì)象鎖的線程等待直到指定時(shí)間或。執(zhí)行對(duì)該對(duì)象加的同步代碼塊。 在JAVA的學(xué)習(xí)中,不少人會(huì)把sleep和wait搞混,認(rèn)為都是做線程的等待,下面主要介紹下這倆者是什么,及了解它們之間的差異和相似之處。 一般差異 簡單來說,wait()是一個(gè)用于線程同步的實(shí)例方法。因?yàn)槎x在java.l...

    noONE 評(píng)論0 收藏0
  • Thread類源碼解讀(2)——線程狀態(tài)及常用方法

    摘要:如果線程還存活,線程就無限期等待,并讓出監(jiān)視器鎖,進(jìn)入狀態(tài)。當(dāng)線程從狀態(tài)被喚醒后通過,或者是假喚醒將繼續(xù)競爭監(jiān)視器鎖,當(dāng)成功獲得監(jiān)視器鎖后,他將從調(diào)用的地方恢復(fù),繼續(xù)運(yùn)行。 前言 系列文章目錄 上一篇我們討論了線程的創(chuàng)建,本篇我們來聊一聊線程的狀態(tài)轉(zhuǎn)換以及常用的幾個(gè)比較重要的方法。 本篇依然是通過源碼分析來了解這些知識(shí)。 本文源碼基于jdk1.8 。 閱讀完本文,你應(yīng)當(dāng)有能力回答以...

    luqiuwen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<