摘要:期間對象鎖是釋放的調用的時候鎖并沒有被釋放,調用也屬于這種情況一般而言,用于線程間的通信,用于線程狀態的控制參考資料
類的區別最近在做面試題的時候看到這道題,復習了一遍《Thinking in Java》,在此記錄這個答案
wait()來自于 java.lang.Object,任何對象都有此方法
sleep()來自于 java.lang.Thread,調用的對象為線程
用法上的區別看一下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.
使當前線程掛起,當對象調用java.lang.Object.notify()或者java.lang.Object.notifyAll()或者時間到期,則從wait()中恢復執行
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.
在指定的時間內使當前執行的線程睡眠(暫停執行)
同步與鎖的不同wait()與sleep()最主要的區別就在于同步與鎖,wiat()必須放在synchronized block中,否則會在program runtime時扔出java.lang.IllegalMonitorStateException異常。
wait()期間對象鎖是釋放的
調用sleep()的時候鎖并沒有被釋放,調用yield()也屬于這種情況
synchronized(LOCK) { Thread.sleep(1000); // LOCK is held } synchronized(LOCK) { LOCK.wait(); // LOCK is not held }
一般而言,wait()用于線程間的通信,sleep()用于線程狀態的控制
參考資料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/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64300.html
摘要:休眠和等待方法是多線程中常用的兩個方法,它們有什么區別及一些該注意的地方有哪些呢下面給大家一一分解。區別使用場景一般用于當前線程休眠,或者輪循暫停操作,則多用于多線程之間的通信。 sleep(休眠) 和 wait(等待) 方法是 Java 多線程中常用的兩個方法,它們有什么區別及一些該注意的地方有哪些呢?下面給大家一一分解。 區別1:使用限制 使用 sleep 方法可以讓讓當前線程休眠...
摘要:本文對多線程基礎知識進行梳理,主要包括多線程的基本使用,對象及變量的并發訪問,線程間通信,的使用,定時器,單例模式,以及線程狀態與線程組。源碼采用構建,多線程這部分源碼位于模塊中。通知可能等待該對象的對象鎖的其他線程。 本文對多線程基礎知識進行梳理,主要包括多線程的基本使用,對象及變量的并發訪問,線程間通信,lock的使用,定時器,單例模式,以及線程狀態與線程組。 寫在前面 花了一周時...
摘要:典型地,和被用在等待另一個線程產生的結果的情形測試發現結果還沒有產生后,讓線程阻塞,另一個線程產生了結果后,調用使其恢復。使當前線程放棄當前已經分得的時間,但不使當前線程阻塞,即線程仍處于可執行狀態,隨時可能再次分得時間。 1、說說進程,線程,協程之間的區別 簡而言之,進程是程序運行和資源分配的基本單位,一個程序至少有一個進程,一個進程至少有一個線程.進程在執行過程中擁有獨立的內存單元...
摘要:一般差異簡單來說,是一個用于線程同步的實例方法。暫停當前線程,不釋放任何鎖。用來線程間通信,使擁有該對象鎖的線程等待直到指定時間或。執行對該對象加的同步代碼塊。 在JAVA的學習中,不少人會把sleep和wait搞混,認為都是做線程的等待,下面主要介紹下這倆者是什么,及了解它們之間的差異和相似之處。 一般差異 簡單來說,wait()是一個用于線程同步的實例方法。因為定義在java.l...
摘要:如果線程還存活,線程就無限期等待,并讓出監視器鎖,進入狀態。當線程從狀態被喚醒后通過,或者是假喚醒將繼續競爭監視器鎖,當成功獲得監視器鎖后,他將從調用的地方恢復,繼續運行。 前言 系列文章目錄 上一篇我們討論了線程的創建,本篇我們來聊一聊線程的狀態轉換以及常用的幾個比較重要的方法。 本篇依然是通過源碼分析來了解這些知識。 本文源碼基于jdk1.8 。 閱讀完本文,你應當有能力回答以...
閱讀 3280·2023-04-26 02:09
閱讀 2574·2021-11-24 09:39
閱讀 3268·2021-11-16 11:52
閱讀 3614·2021-10-26 09:50
閱讀 2771·2021-10-08 10:05
閱讀 2456·2021-09-22 15:25
閱讀 3299·2019-08-30 13:14
閱讀 908·2019-08-29 17:06