成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關(guān)于 sleep 和 wait 深度對比!

開發(fā)
本文我們分析了sleep? 和 wait,sleep?用于暫停當(dāng)前線程一段指定時間,但仍保持鎖,這常用來控制執(zhí)行節(jié)奏或定時操作。

在計算機編程中,特別是在多線程或并發(fā)編程中,sleep 和 wait 是兩個非常常見的函數(shù),但它們有不同的用途和工作機制,這篇文章我們將詳細地討論 sleep 和 wait 的區(qū)別,包括它們的內(nèi)部工作原理、應(yīng)用場景以及詳細的示例代碼,以幫助更全面地理解它們。

sleep

工作機制:

  • 暫停當(dāng)前線程: sleep 方法暫停當(dāng)前執(zhí)行的線程一段指定的時間,時間結(jié)束后線程再恢復(fù)執(zhí)行。
  • 不會釋放鎖: 即使線程在 sleep 狀態(tài)下持有鎖,它也不會釋放。它依然占用著該鎖,其他線程無法獲得該鎖。
  • 線程狀態(tài)轉(zhuǎn)換: sleep 方法會使線程從運行(RUNNING)狀態(tài)轉(zhuǎn)換為計時等待(TIMED_WAITING)狀態(tài)。
  • 靜態(tài)方法: 它是 Thread 類的靜態(tài)方法,調(diào)用時通過 Thread.sleep 訪問。

應(yīng)用場景:

  • 限流: 控制任務(wù)執(zhí)行的頻率,防止線程過度占用CPU資源。
  • 定時任務(wù): 在某個循環(huán)中,定時執(zhí)行某些任務(wù)。

示例代碼:

public class SleepExample extends Thread {
    public void run() {
        try {
            System.out.println("Thread going to sleep for 2 seconds.");
            Thread.sleep(2000); // 睡眠 2 秒
            System.out.println("Thread woke up after sleeping.");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        SleepExample thread = new SleepExample();
        thread.start();
    }
}

wait

工作機制:

  • 釋放鎖并等待通知: wait 方法使當(dāng)前線程等待,直到其他線程調(diào)用當(dāng)前對象的 notify 或 notifyAll 方法。調(diào)用 wait 時,線程會釋放它持有的鎖。
  • 必須在同步塊或同步方法中使用: wait 方法必須在同步塊或同步方法中調(diào)用,否則會拋出 IllegalMonitorStateException。
  • 線程狀態(tài)轉(zhuǎn)換: wait 方法會使線程從運行(RUNNING)狀態(tài)轉(zhuǎn)換為等待(WAITING)狀態(tài)。
  • 對象方法: 它是 Object 類的方法,所以任何對象都可以調(diào)用。

應(yīng)用場景:

  • 線程間通信: 多個線程協(xié)同工作時,一個線程等待某個條件滿足后,再被其他線程通知繼續(xù)執(zhí)行。
  • 生產(chǎn)者-消費者模型: 經(jīng)常用于實現(xiàn)生產(chǎn)者-消費者模式中的同步。

示例代碼:

public class WaitNotifyExample {
    private static final Object lock = new Object();

    public static void main(String[] args) throws InterruptedException {
        // 等待線程
        Thread waitingThread = new Thread(() -> {
            synchronized (lock) {
                try {
                    System.out.println("Thread waiting for the lock to be released.");
                    lock.wait(); // 進入等待狀態(tài)并釋放鎖
                    System.out.println("Thread resumed after lock released.");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        // 通知線程
        Thread notifyingThread = new Thread(() -> {
            synchronized (lock) {
                System.out.println("Notifying other threads.");
                lock.notify(); // 通知其他等待該鎖的線程
                System.out.println("Notified waiting thread.");
            }
        });

        waitingThread.start();
        Thread.sleep(1000); // 確保 waitingThread 先持有鎖并進入等待狀態(tài)
        notifyingThread.start();
    }
}

sleep 和 wait的對比

特性

sleep

wait

釋放鎖

需要在同步塊或方法中

屬于

Thread 類

Object 類

引發(fā)異常

InterruptedException

InterruptedException 引發(fā)機制相同

作用范圍

當(dāng)前調(diào)用的線程

當(dāng)前擁有鎖的線程

線程狀態(tài)改變

變?yōu)橛嫊r等待(TIMED_WAITING)

變?yōu)榈却╓AITING)

典型應(yīng)用場景

暫停線程的一段時間,用于控制節(jié)奏或定時操作

線程間通信,生產(chǎn)者-消費者模型等

總結(jié)

本文,我們分析了sleep 和 wait,sleep用于暫停當(dāng)前線程一段指定時間,但仍保持鎖,這常用來控制執(zhí)行節(jié)奏或定時操作。wait使線程釋放鎖并進入等待狀態(tài),直到通過 notify/notifyAll 被喚醒,需在同步塊中使用,適用于線程間通信如生產(chǎn)者-消費者模型。

責(zé)任編輯:趙寧寧 來源: 猿java
相關(guān)推薦

2011-05-26 15:52:31

sleep()wait()

2022-01-06 07:03:30

Linux SleepWait

2025-04-02 08:25:00

Java開發(fā)wait

2023-09-22 08:39:00

sleep函數(shù)語言

2023-04-28 07:49:13

Javawaitsleep

2024-12-20 16:49:15

MyBatis開發(fā)代碼

2025-03-28 12:00:00

進程編程函數(shù)

2011-07-29 09:24:14

2022-08-02 08:00:49

sleepwait釋放鎖

2020-07-22 08:06:46

釋放鎖synchronize線程

2019-08-30 08:54:05

TypeScriptJavaScript語言

2018-01-10 15:03:27

前端TypeScriptJavaScript

2019-03-06 09:55:54

Python 開發(fā)編程語言

2009-11-16 16:23:10

PHP數(shù)組遍歷

2024-12-16 13:00:00

SpringJava

2015-01-19 09:33:41

Rails\Djang

2021-06-07 11:33:24

服務(wù)器優(yōu)化TIME-WAIT

2024-10-14 17:24:32

2020-08-28 17:54:31

深度學(xué)習(xí)框架

2023-06-12 08:00:00

聊天機器人ChatGPT人工智能
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 黄色大片网站 | 国产日批 | 国产一区在线免费观看 | 亚洲一区二区三区四区五区中文 | 亚洲精品www久久久久久广东 | 亚洲成av | 在线观看黄色大片 | 自拍偷拍中文字幕 | 久久久久久久久久久久亚洲 | 中文字幕久久精品 | 婷婷99 | 欧美色a v | 一区二区三区四区国产 | 玖操| 国产一区二区电影网 | 亚洲欧洲一区二区 | 免费成人高清 | 九九av | 精品乱人伦一区二区三区 | 国产欧美在线观看 | www.国产91| 91pao对白在线播放 | 日韩欧美在线一区 | 一级一级一级毛片 | 99视频在线 | 亚洲韩国精品 | 国产露脸国语对白在线 | 黑人性hd| 亚洲欧美久久 | 亚洲国产网址 | 日韩av中文| 一区二区三区视频在线免费观看 | 韩日免费视频 | 中文字幕第二十页 | 久久一久久| 欧美黑人国产人伦爽爽爽 | 亚洲免费在线视频 | 久草新在线 | 欧美三级视频在线观看 | 中文字幕一区二区三区精彩视频 | 超碰日本|