1. 程式人生 > >sleep和wait區別

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 SleepWait區別

1、這兩個方法來自不同的類,sleep來自Thread類,wait 來自Object類。   sleep是Thread的靜態類方法,誰呼叫的誰去睡覺,即使是在a執行緒離呼叫了b的sleep方法,實際上還是a 去睡覺,要讓b去睡覺要在b的程式碼中呼叫sleep. 2、最主要

sleepwait區別

區別一:所屬物件不一樣 sleep方法是Thread類裡面的方法,而wait是Object裡面的方法,Object大家都知道是“祖宗類”也就是說所有的方法都有wait方法,也都可以呼叫wait方法。在Object中wait方法是一個過載的方法,分別為wait(long t

sleepwait區別(執行緒基本必問的)

     這個問題在面試執行緒方面的知識時,基本上屬於必問的問題。因此這裡有必要做一個較為詳細的總結。    區別一                  首先需要明白的是這兩個方法根本來自不同的類,sleep來自Thread,wait來自Object類。           

sleepwait區別

毫秒 機制 捕獲 控制 斷線 捕獲異常 程序 rup 同步 Java中的多線程是一種搶占式的機制,而不是分時機制。搶占式的機制是有多個線程處於可運行狀態,但是只有一個線程在運行。 共同點 : 1. 他們都是在多線程的環境下,都可以在程序的調用處阻塞指定的毫秒數,並返回。 2

多線程中sleepwait區別,以及多線程的實現方式及原因,定時器--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 sleepwait區別聯系

mon syn cron lee ava pos div 創建 his 1 object monitor java的每個對象都有一個固有的lock,這個lock就稱為object monitor。 比如method,即方法的方法,它也是有一個monitor。所有,如果一個方

博眾娛樂源碼搭建與sleepwait區別

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=

sleepwait方法的區別(不看後悔,看了必懂)

①原理不同 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類、兩個執行緒之間的通訊、三個及以上執行緒通訊、sleepwait區別

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 方法可