1. 程式人生 > >執行緒wait()和sleep()的區別

執行緒wait()和sleep()的區別

 這兩者的施加者是有本質區別的.
sleep()是讓某個執行緒暫停執行一段時間,其控制範圍是由當前執行緒決定,也就是說,線上程裡面決定.好比如說,我要做的事情是 "點火->燒水->煮麵",而當我點完火之後我不立即燒水,我要休息一段時間再燒.對於執行的主動權是由我的流程來控制.

而wait(),首先,這是由某個確定的物件來呼叫的,將這個物件理解成一個傳話的人,當這個人在某個執行緒裡面說"暫停!",也是 thisOBJ.wait(),這裡的暫停是阻塞,還是"點火->燒水->煮飯",thisOBJ就好比一個監督我的人站在我旁邊,本來該線 程應該執行1後執行2,再執行3,而在2處被那個物件喊暫停,那麼我就會一直等在這裡而不執行3,但正個流程並沒有結束,我一直想去煮飯,但還沒被允許, 直到那個物件在某個地方說"通知暫停的執行緒啟動!",也就是thisOBJ.notify()的時候,那麼我就可以煮飯了,這個被暫停的執行緒就會從暫停處 繼續執行.


其實兩者都可以讓執行緒暫停一段時間,但是本質的區別是一個執行緒的執行狀態控制,一個是執行緒之間的通訊的問題


在java.lang.Thread類中,提供了sleep(), 而java.lang.Object類中提供了wait(), notify()和notifyAll()方法來操作執行緒 sleep()可以將一個執行緒睡眠,引數可以指定一個時間。 而wait()可以將一個執行緒掛起,直到超時或者該執行緒被喚醒。     wait有兩種形式wait()和wait(milliseconds). sleep和wait的區別有:   1,這兩個方法來自不同的類分別是Thread和Object   2,最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他執行緒可以使用同步控制塊或者方法。   3,wait,notify和notifyAll只能在同步控制方法或者同步控制塊裡面使用,而sleep可以在     任何地方使用    synchronized(x){       x.notify()      //或者wait()    }    4,sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常

相關推薦

執行wait()sleep()的區別

 這兩者的施加者是有本質區別的. sleep()是讓某個執行緒暫停執行一段時間,其控制範圍是由當前執行緒決定,也就是說,線上程裡面決定.好比如說,我要做的事情是 "點火->燒水->煮麵",而當我點完火之後我不立即燒水,我要休息一段時間再燒.對於執行的主動權是由我的

執行waitsleep區別

wiat和sleep的區別? 1、wait可以指定時間也可以不指定      sleep必須指定時間。 2、在同步中,對cpu的執行權和鎖的處理不同 wait:釋 放執行權,釋放鎖。 slee

Java第十四天學習筆記~多執行執行直接通訊---等待喚醒機制、多生產者多消費者問題、JDK1.5新特性、waitsleep區別

執行緒直接通訊示例 //資源 class Resource { String name; String sex; } //輸入 class Input implements Runnable { Resource r; Input(Resource r) { this.r=r;

記錄java中的object類以及waitsleep區別

java.lang.Object public class Object: Object 是類層次結構的根類。每個類都使用 Object 作為超類。所有物件(包括陣列)都實現這個類的方法。 它含有如下的方法: 注意wait方法和sleep方法的區別: s

java執行waitnotify 筆記理解

首先明確 兩個的概念: wait()方法是暫停使用當前鎖執行的執行緒,並釋放當前執行緒的資源和當前的物件鎖。 notify()方法是隨機喚醒使用當前鎖暫停的執行緒,而notifyAll()是喚醒所有的使用當前鎖暫停的執行緒 直接兩段程式碼 看看效果: 一個生產者執行緒往list新增一

二、多執行[wait()notify()/notifyAll()]

一、 wait()和notify()/notifyAll() 鎖,這裡講的就是同步鎖,同步執行的鎖,釋放完之後“鎖”之後就喪失了執行能力了,直到notify通知到wait方法, (notify並不是釋放鎖),只是通知wait可以去競爭鎖了,wait並不是立刻得到鎖,鎖在別人手裡,等待

Java執行wait()notify()的簡單使用

package com.ThreadPool; import java.util.LinkedList; /** * 2019-1-8 * @author Administrator * */ public class Lock { public static void main(St

執行同步非同步區別 非同步機制

1 區別同步和非同步 一個程序啟動的多個不相干執行緒,它們相互之間關係為非同步。 舉個簡單的例子 就是遊戲,遊戲會有影象和背景音樂 影象是由玩家操作的 而背景音樂一般都是迴圈播放玩家不能操作 這裡的影象和聲音就分別是不同的執行緒 影象一般是主執行緒 背景音樂是守護執

Java的阻塞中斷機制( wait notify使用 waitsleep區別 interrupt使用其他中斷方法)

wait、notify和notifyAll wait和notify(notifyAll)一般是成對搭配出現的,用來資源調控。wait用來將當然執行緒掛起,notify/notifyAll用來恢復執行緒。它是類Object的方法,也就是所有的物件都可以使用。一個簡單的例子

執行的四種狀態以及waitsleep區別

一、執行緒的四種狀態 新建(new):處於該狀態的時間很短暫。已被分配了必須的系統資源,並執行了初始化。表示有資格獲得CPU時間。排程器可以把該執行緒變為runnable或者blocked狀態 就緒(Runnable):這種狀態下只要排程器把時間片分配給執行緒,執行緒就能執行。處在這種狀態就

Java多執行-併發之sleep() wait(n) 、 wait() 的區別

sleep() 和 wait(n) 、 wait() 的區別 答: sleep 方法:是 Thread 類的靜態方法,當前執行緒將睡眠 n 毫秒,執行緒進入阻塞狀態。當睡眠時間到了,會接觸阻塞,進入可執行狀態,等待 CPU 的到來。睡眠不釋放鎖(如果有的話) wai

javaSE (三十六)Runtime類、Timer類、兩個執行之間的通訊、三個及以上執行通訊、sleepwait區別

1、Runtime類: runtime類其實是單例模式(見上文)的一個體現,它的構造方法被私有化,可以在程式碼中輸入命令字串控制計算機 程式碼例項: package cn.xinhua; import java.io.IOException; public class Threa

java 執行中的 wait()sleep()

wait() 方法是寫在java.lang.Object類中的 (ps: notify()  notifyAll()也是在Object中定義的) wait()原始碼註釋: Causes the current thread to wait until either a

Java執行阻塞方法sleep()wait()精煉詳解

一、前期基礎知識儲備 sleep()和wait()方法都是Java中造成執行緒阻塞的方法。感興趣的讀者可以參見筆者之前的文章《Java中什麼方法導致執行緒阻塞》,裡面詳細講述了為什麼Java要造成執行緒阻塞和Java中造成執行緒阻塞的幾種方法。 執行緒的生命週期 這

java多執行中的sleep()、wait()、notify()物件鎖的關係

1、sleep()不釋放物件鎖。 2、wait()釋放物件鎖。 3、notify()不釋放物件鎖。 (1)、notify釋放鎖嗎?不要誤導別人。notifty()只是喚醒此物件監視器上等待的單個執行緒,直到當前執行緒釋放此物件上的鎖,才有可能繼續執行被喚醒的執行緒。 (2)

執行同步中sleepwait區別

1、函式 wait是Object的一個函式,指執行緒處於進入等待狀態,此時執行緒不佔用任何資源,不增加時間限制。wait可以被notify和notifyAll函式喚醒(這兩個也是Object的函

關於sleep()、yield()、wait()三種讓執行暫停方法的區別

一、sleep()是讓當前真正執行的執行緒暫停一段時間,並進入阻塞狀態 噹噹前執行緒呼叫sleep()方法進入阻塞狀態後,在其睡眠狀態內,執行緒不會獲得執行的機會,即使系統沒有其他可執行路徑,處於sleep()中的執行緒也不會執行 二、yield()方法是Thread類提供

java執行中yield(),sleep(),wait()區別詳解

1、sleep() 使當前執行緒(即呼叫該方法的執行緒)暫停執行一段時間,讓其他執行緒有機會繼續執行,但它並不釋放物件鎖。也就是說如果有synchronized同步快,其他執行緒仍然不能訪問共享資料。

執行阻塞中斷(sleepwait、io、鎖)四種恢復方式

1、執行緒阻塞 一個執行緒進入阻塞狀態可能的原因: ①通過呼叫sleep(millseconds)使任務進入休眠狀態; class Demo1 implements Runnable thr

執行等待喚醒機制:從wait()sleep()的差別說起

1. wait():釋放資源,釋放鎖 sleep():釋放資源,不釋放鎖 wait():Object的方法,用在同步當中,是同步鎖的方法,以鎖控制執行緒 sleep():執行緒類Thread本身的靜態方法wait(),notify(),notifyAll()方法是用在同步當