Java中sleep() 和 wait() 有什么區別?

Java中sleep() 和 wait() 有什么區別?

sleep()wait() 是兩個在 Java 中用于線程控制的方法,它們有一些重要的區別:

  1. 關聯對象

    • sleep()Thread 類的靜態方法,它讓當前線程休眠指定的時間,不釋放對象鎖。

    • wait()Object 類的方法,它用于在同步塊內,暫時釋放對象的鎖,并等待其他線程通知或中斷。

  2. 調用方式

    • sleep() 可以直接通過 Thread.sleep() 調用。

    • wait() 必須在同步塊(synchronized block)內調用,因為它會釋放對象鎖,而在同步塊外調用會導致 IllegalMonitorStateException 異常。

  3. 使用場景

    • sleep() 主要用于線程間的時間調度,讓線程休眠一段時間。

    • wait() 主要用于線程間的協作,允許一個線程等待另一個線程通知它。

下面是一個簡單的示例,演示了 sleep()wait() 的用法:

public class SleepWaitExample {public static void main(String[] args) {final Object lock = new Object();// sleep 示例Thread sleepThread = new Thread(() -> {synchronized (lock) {System.out.println("SleepThread is going to sleep...");try {Thread.sleep(2000); // 休眠2秒} catch (InterruptedException e) {e.printStackTrace();}System.out.println("SleepThread has awakened.");}});// wait 示例Thread waitThread = new Thread(() -> {synchronized (lock) {System.out.println("WaitThread is waiting...");try {lock.wait(); // 等待被喚醒} catch (InterruptedException e) {e.printStackTrace();}System.out.println("WaitThread has been notified.");}});sleepThread.start();waitThread.start();try {Thread.sleep(1000); // 等待一秒,確保 sleepThread 和 waitThread 同時執行} catch (InterruptedException e) {e.printStackTrace();}synchronized (lock) {System.out.println("Main thread notifies waiting thread.");lock.notify(); // 喚醒 waitThread}}
}

在上述示例中,SleepThread 使用 Thread.sleep() 進行休眠,而 WaitThread 使用 lock.wait() 進行等待。主線程在一秒后喚醒了 WaitThread。這展示了 sleep() 用于時間調度,而 wait() 用于線程協作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209450.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209450.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209450.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

YOLOv8改進 | 2023 | RCS-OSA替換C2f實現暴力漲點(減少通道的空間對象注意力機制)

一、本文介紹 本文給大家帶來的改進機制是RCS-YOLO提出的RCS-OSA模塊,其全稱是"Reduced Channel Spatial Object Attention",意即"減少通道的空間對象注意力"。這個模塊的主要功能是通過減少特征圖的通道數量,同時關注空…

Android Studio APK打包指定包名

在最近寫的一個案列中嘗試用最新版的Android studio對項目進行打包測試,想要指定打包的包名這樣便于區分的時候發現以前的許多方法都過時了,查了很多資料才弄明白each被拋棄了。本教程建議先看第三步。 目錄 一、配置根目錄下gradle.build 二、通過bui…

Billu_b0x

信息收集 #正常進行信息收集就好Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-18 22:07 CST Nmap scan report for 192.168.182.142 (192.168.182.142) Host is up (0.00073s latency).PORT STATE SERVICE 22/tcp open ssh 80/tcp open http | http-cookie-flags:…

VSC改造MD編輯器及圖床方案分享

VSC改造MD編輯器及圖床方案分享 用了那么多md編輯器,到頭來還是覺得VSC最好用。這次就來分享一下我的blog文件編輯流吧。 這篇文章包括:VSC下md功能擴展插件推薦、圖床方案、blog文章管理方案 VSC插件 Markdown All in One Markdown Image - 粘粘圖片…

【電子通識】為什么電阻都是2.2、3.3、4.7、5.1這樣的小數,而不是整數?

剛開始接觸電路設計可能會對市面上已經有的電阻值如:2.2Ω、4.7Ω、5.1Ω、22Ω、47Ω、51Ω,通常都不是整數覺得非常困惑,所以查閱了一些資料,總結如下: 電阻是使用指數分布來設計生產的,即遵循國際電工委…

【CSP】202303-2_墾田計劃Python實現

文章目錄 [toc]試題編號試題名稱時間限制內存限制問題描述輸入格式輸出格式樣例輸入1樣例輸出1樣例解釋樣例輸入2樣例輸出2樣例解釋子任務Python實現 試題編號 202303-2 試題名稱 墾田計劃 時間限制 1.0s 內存限制 512.0MB 問題描述 頓頓總共選中了 n n n塊區域準備開墾田地&a…

基于STM32 + DMA介紹,應用和步驟詳解(ADC多通道)

前言 本篇博客主要學習了解DMA的工作原理和部分寄存器解析,針對ADC多通道來對代碼部分,應用部分作詳細講解,掌握代碼編程原理。本篇博客大部分是自己收集和整理,如有侵權請聯系我刪除。 本次博客開發板使用的是正點原子精英版&am…

23種策略模式之策略模式

文章目錄 前言優缺點使用場景角色定義UML模擬示例小結 前言 在軟件開發中,設計模式是為了解決常見問題而提供的一套可重用的解決方案。策略模式(Strategy Pattern)是其中一種常見的設計模式,它屬于行為型模式。該模式的核心思想是…

Java程序設計實驗6 | 集合類

*本文是博主對Java各種實驗的再整理與詳解,除了代碼部分和解析部分,一些題目還增加了拓展部分(?)。拓展部分不是實驗報告中原有的內容,而是博主本人自己的補充,以方便大家額外學習、參考。 (解…

基于ssm的大型商場會員管理系統論文

摘 要 進入信息時代以來,很多數據都需要配套軟件協助處理,這樣可以解決傳統方式帶來的管理困擾。比如耗時長,成本高,維護數據困難,數據易丟失等缺點。本次使用數據庫工具MySQL和編程框架SSM開發的大型商場會員管理系統…

【漏洞復現】FLIR AX8紅外線熱成像儀命令執行漏洞

漏洞描述 eledyne FLIR 設計、開發、制造以及強大的傳感和意識技術。自透射熱圖像、可見光圖像、可見頻率分析、來自測量和診斷的先進威脅測量系統以及日常生活的創新解決方案。 Teledyne FLIR 提供多種產品用于政府、國防、工業和商業市場。我們的產品,緊急救援人員,軍事人…

插入排序與希爾排序(C語言實現)

1.插入排序 由上面的動圖可以知道插入排序的邏輯就是從第一個元素開始往后遍歷,如果找到比前一個元素小的(或者大的)就往前排,所以插入排序的每一次遍歷都會保證前面的數據是有序的,接下類用代碼進行講解。 我們這里傳…

bash中通過變量中的內容獲取對應的關聯數組

bash中通過變量中的內容獲取對應的關聯數組 Bash declare 手冊: https://phoenixnap.com/kb/bash-declare 實際問題: 在 bash 中創建了多個關聯數組,需要根據輸入的值,獲取不同的關聯數組。 可以使用 if 進行多次判斷&#xff…

智能優化算法應用:基于浣熊算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用:基于浣熊算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用:基于浣熊算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.浣熊算法4.實驗參數設定5.算法結果6.參考文獻7.MATLAB…

解決HTTP錯誤500.19 - internal server error -內部服務器錯誤的終極指南

在開發和維護網絡應用程序時,難免會遇到各種HTTP錯誤代碼。其中,HTTP錯誤500.19 - 內部服務器錯誤可謂是最令人頭痛的問題之一。當你的應用程序遇到這個錯誤時,它似乎就像一道墻壁,擋住了你前進的道路。但別擔心,本篇技…

Git全局設置命令---設置提交人姓名

介紹 使用git命令設置提交人姓名 命令 git config --global user.name "超音速"

react-photo-view 的介紹、安裝、使用。

目錄 基本介紹 安裝 使用 基本介紹 react-photo-view 是一個基于 React 的圖片查看器組件,用于在網頁上展示和瀏覽圖片。該組件提供了用戶友好的界面和交互,可以輕松地在應用程序中集成并使用。 支持觸摸手勢,拖動/平移/物理效果滑動…

修改移遠提供的GobiNet、quectel-CM源碼,使其支持有方N720 4G模塊

最近在研究imx6ull linux下4G模塊驅動的移植,參考的移遠ec20的移植方法,添加了GobiNet驅動,編譯了quectel-CM工具,并且可以正常撥號,分配到ip,如下: ping外網也沒有壓力,如下…

軟件工程 考試重點

結構化分析 考慮數據和處理的需求分析方法,稱為結構分析方法(SA) 結構化分析基于 分解、抽象 的基本思想 分解:對于復雜的系統,為將復雜度降低到可以掌握的程度,可以把大問題分解為若干個小問題&#xf…

【go-zero】go-zero使用ent框架 如何使用源生sql完成查詢

背景 本篇教程我們采用的是go-zero的快速腳手架工具 simple-admin 框架的開發 github地址:https://github.com/suyuan32/simple-admin-core 因為框架推薦使用Ent 這篇教程我們則對Ent的基本使用的幾種形式進行一個總結 一、開啟ent的源生sql 1、simple-admin生成rpc 【go-…