sleep和wait區別
區別一:所屬物件不一樣
- sleep方法是Thread類裡面的方法,而wait是Object裡面的方法,Object大家都知道是“祖宗類”也就是說所有的方法都有wait方法,也都可以呼叫wait方法。在Object中wait方法是一個過載的方法,分別為wait(long timeout,int nanos),wait(long timeout),wait(),其中wait()方法實際等同於wait(0)=wait(long timeout)也就是一個引數時,引數為0。這三者都可以看做是一個方法即wait(long timeout) ,兩個引數的原始碼如下:
/**
* timeout:要等待的最長時間,單位為毫秒
* nanos:額外時間,單位為納秒
*/
// 這個方法被final修飾,不能被重寫
public final void wait(long timeout, int nanos) throws InterruptedException {
if (timeout < 0) { // timeout不能為負數
throw new IllegalArgumentException("timeout value is negative");
}
// 額外時間不能超過0~999999(ns)範圍
if (nanos < 0 || nanos > 999999 ) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
//額外時間在0.5ms以上或者當額外時間0~0.5ms並且timeout=0時,等待時間+1
if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
timeout++;
}
// 呼叫一個引數的wait方法
wait(timeout);
}
// wait方法是一個本地方法
public final native void wait(long timeout) throws InterruptedException;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
此方法導致當前執行緒(稱之為 T)將其自身放置在物件的等待集中,然後放棄此物件上的所有同步要求。出於執行緒排程目的,在發生以下四種情況之一前,執行緒 T 被禁用,且處於休眠狀態:
a,其他某個執行緒呼叫此物件的 notify 方法,並且執行緒 T 碰巧被任選為被喚醒的執行緒。
b,其他某個執行緒呼叫此物件的 notifyAll 方法。
c,其他某個執行緒中斷執行緒 T。
d,大約已經到達指定的實際時間。但是,如果 timeout 為零,則不考慮實際時間,在獲得通知前該執行緒將一直等待。
以上的可能有點繞口,但簡而言之,呼叫了wait方法的執行緒在指定時間內將會處於等待狀態,除非被notify或者其它物件使用了notifyAll方法。
區別二:對鎖的控制權:呼叫了sleep方法的執行緒物件,雖然在指定時間內並不會獲得CPU的執行權,但是並沒有釋放對鎖的控制,也就是說,當處於休眠狀態的執行緒獲得鎖時,其它執行緒並不能夠重新獲取鎖,而wait方法是釋放鎖的,其它執行緒可以獲得鎖而獲取對資源的控制。
相關推薦
Android Sleep和Wait區別
1、這兩個方法來自不同的類,sleep來自Thread類,wait 來自Object類。 sleep是Thread的靜態類方法,誰呼叫的誰去睡覺,即使是在a執行緒離呼叫了b的sleep方法,實際上還是a 去睡覺,要讓b去睡覺要在b的程式碼中呼叫sleep. 2、最主要
sleep和wait區別
區別一:所屬物件不一樣 sleep方法是Thread類裡面的方法,而wait是Object裡面的方法,Object大家都知道是“祖宗類”也就是說所有的方法都有wait方法,也都可以呼叫wait方法。在Object中wait方法是一個過載的方法,分別為wait(long t
sleep和wait區別(執行緒基本必問的)
這個問題在面試執行緒方面的知識時,基本上屬於必問的問題。因此這裡有必要做一個較為詳細的總結。 區別一 首先需要明白的是這兩個方法根本來自不同的類,sleep來自Thread,wait來自Object類。
sleep和wait的區別
毫秒 機制 捕獲 控制 斷線 捕獲異常 程序 rup 同步 Java中的多線程是一種搶占式的機制,而不是分時機制。搶占式的機制是有多個線程處於可運行狀態,但是只有一個線程在運行。 共同點 : 1. 他們都是在多線程的環境下,都可以在程序的調用處阻塞指定的毫秒數,並返回。 2
多線程中sleep和wait的區別,以及多線程的實現方式及原因,定時器--Timer
守護 驗證 取消 技術 方法 代碼 安全 接口 art 1. Java中sleep和wait的區別 ① 這兩個方法來自不同的類分別是,sleep來自Thread類,和wait來自Object類。 sleep是Thread的靜態類方法,誰調用的誰去睡覺,即使在a線程裏調用b
【轉載】C# sleep 和wait的區別
通知 sdn 代碼 blog tool ogr rul smart abs eep和wait都是使線程暫時停止執行的方法,但它們有很大的不同。 1. sleep是線程類Thread 的方法,它是使當前線程暫時睡眠,可以放在任何位置。 而wait,它是使當前線程暫時放棄對象的
java sleep和wait的區別和聯系
mon syn cron lee ava pos div 創建 his 1 object monitor java的每個對象都有一個固有的lock,這個lock就稱為object monitor。 比如method,即方法的方法,它也是有一個monitor。所有,如果一個方
博眾娛樂源碼搭建與sleep和wait的區別
read 如果 運行 inter rup 需要 兩個 sleep bject sleep和wait的區別 1、這兩個方法來自不同的類分別是,sleep來自Thread類,和wait來自Object類。 sleep是Thread的靜態類方法,誰調用的誰去睡覺,(博眾娛樂源碼搭
java中的sleep()和wait()的區別
except 的區別 獲取對象 waiting 區別 ace enter thread .html 引自:https://www.cnblogs.com/hongten/p/hongten_java_sleep_wait.html 對於sleep()方法,我們首先要知道該方
【轉】【執行緒】sleep() 和 wait() 的區別
https://blog.csdn.net/xyh269/article/details/52613507?utm_source=blogkpcl6 https://blog.csdn.net/lcore/article/details/12221217?utm_source=
sleep和wait方法的區別(不看後悔,看了必懂)
①原理不同 sleep()方法是Thread類的靜態方法,它會使執行緒的執行暫停一段時間,把執行機會讓給其他執行緒,等倒計時時間一到,此執行緒會自動甦醒 wait()是Object類的方法,用於執行緒間的通訊,使當前擁有鎖的程序等待,直到其他執行緒呼叫notify()方法才醒過來 ②
java面試題之sleep()和wait()方法的區別
sleep方法: 屬於Thread類中的方法;會導致程式暫停執行指定的時間,讓出cpu該其他執行緒,但是他的監控狀態依然保持著,當指定時間到了之後,又會自動恢復執行狀態;在呼叫sleep方法的過程中,執行緒不會釋放物件鎖。 wait方法: 屬於Object類中的方法;在呼叫wait方法的時候,執
Java多執行緒-併發之sleep() 和 wait(n) 、 wait() 的區別
sleep() 和 wait(n) 、 wait() 的區別 答: sleep 方法:是 Thread 類的靜態方法,當前執行緒將睡眠 n 毫秒,執行緒進入阻塞狀態。當睡眠時間到了,會接觸阻塞,進入可執行狀態,等待 CPU 的到來。睡眠不釋放鎖(如果有的話) wai
sleep( ) 和 wait( ) 的這 5 個區別,你知道幾個?
sleep(休眠) 和 wait(等待) 方法是 Java 多執行緒中常用的兩個方法,它們有什麼區別及一些該注意的地方有哪些呢?下面給大家一一分解。 區別1:使用限制 使用 sleep 方法可以讓讓當前執行緒休眠,時間一到當前執行緒繼續往下執行,在任何地方都能使
Java 執行緒sleep() 和 wait()的區別
sleep(休眠) 和 wait(等待) 方法是 Java 多執行緒中常用的兩個方法 區別1:使用限制 使用 sleep 方法可以讓當前執行緒休眠,時間一到當前執行緒繼續往下執行,在任何地方都能使用
sleep( ) 和 wait( ) 的這 5 個區別,你知道幾個
sleep(休眠) 和 wait(等待) 方法是 Java 多執行緒中常用的兩個方法,它們有什麼區別及一些該注意的地方有哪些呢?下面給大家一一分解。 區別1:使用限制 使用 sleep 方法可以讓讓當前執行緒休眠,時間一到當前執行緒繼續往下執行,在任何地方都能使用,但
javaSE (三十六)Runtime類、Timer類、兩個執行緒之間的通訊、三個及以上執行緒通訊、sleep和wait的區別
1、Runtime類: runtime類其實是單例模式(見上文)的一個體現,它的構造方法被私有化,可以在程式碼中輸入命令字串控制計算機 程式碼例項: package cn.xinhua; import java.io.IOException; public class Threa
Java併發之sleep() 和 wait(n) 、 wait() 的區別
sleep() 和 wait(n) 、 wait() 的區別 答: sleep 方法:是 Thread 類的靜態方法,當前執行緒將睡眠 n 毫秒,執行緒進入阻塞狀態。當睡眠時間到了,會接觸阻塞,進入可
sleep()和wait()的區別
Java中的多執行緒是一種搶佔式的機制,而不是分時機制。搶佔式的機制是有多個執行緒處於可執行狀態,但是隻有一個執行緒在執行。 sleep()和wait()的共同點: 1. 他們都是在多執行緒的環境下,都可以在程式的呼叫處阻塞指定的毫秒數,並返回。 2. wait()和
sleep( ) 和 wait( ) 的騰訊分分彩原始碼下載這 5 個區別,你知道幾個?
sleep(休眠) 和 wait(等待) 騰訊分分彩原始碼下載 dsluntan.com Q:3393756370 VX:17061863513方法是 Java 多執行緒中常用的兩個方法,它們有什麼區別及一些該注意的地方有哪些呢?下面給大家一一分解。 區別1:使用限制 使用 sleep 方法可