最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java線程Thread.sleep()對比對象的wait示例解析

 更新時間:2023年09月28日 10:20:56   作者:趙KK日常技術(shù)記錄  
這篇文章主要為大家介紹了java線程Thread.sleep()對比對象的wait示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

java多線程

多線程編程是現(xiàn)代軟件開發(fā)中的常見需求,而線程的控制和協(xié)作則是其中的關(guān)鍵挑戰(zhàn)之一。在Java中,有兩種主要的方法可以用來讓線程暫停執(zhí)行:Thread類的sleep()方法和對象的wait()方法。本文將深入研究這兩種方法,分析它們的區(qū)別,以及在不同情況下何時使用哪種方式來控制線程的執(zhí)行。

Thread.sleep() 方法

Thread.sleep()方法是Thread類的靜態(tài)方法,用于讓當前線程休眠一段指定的時間。該方法接受一個毫秒數(shù)作為參數(shù),表示線程將休眠的時間長度。在休眠期間,線程不會釋放它所持有的任何鎖,因此其他線程無法獲得這些鎖。

以下是一個簡單的示例,演示了如何使用Thread.sleep()方法:

public class SleepExample {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("Start of the program");
        Thread.sleep(2000); // 線程休眠2秒
        System.out.println("End of the program");
    }
}

在上面的示例中,主線程休眠了2秒后繼續(xù)執(zhí)行。

對象的 wait() 方法

wait()方法是Object類的方法,用于讓當前線程等待,直到其他線程調(diào)用相同對象的notify()notifyAll()方法來喚醒它。wait()方法通常與synchronized關(guān)鍵字一起使用,以確保線程在等待期間釋放鎖,從而允許其他線程訪問共享資源。

以下是一個示例,演示了如何使用wait()notify()方法來實現(xiàn)線程的協(xié)作:

public class WaitNotifyExample {
    public static void main(String[] args) {
        final Object lock = new Object();
        Thread thread1 = new Thread(new Runnable() {
            public void run() {
                synchronized (lock) {
                    System.out.println("Thread 1: Waiting...");
                    try {
                        lock.wait(); // 等待被喚醒
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("Thread 1: Resumed.");
                }
            }
        });
        Thread thread2 = new Thread(new Runnable() {
            public void run() {
                synchronized (lock) {
                    System.out.println("Thread 2: Waking up Thread 1...");
                    lock.notify(); // 喚醒等待的線程
                }
            }
        });
        thread1.start();
        thread2.start();
    }
}

在上面的示例中,thread1等待被thread2喚醒,然后繼續(xù)執(zhí)行。

Thread.sleep() vs. 對象的 wait():區(qū)別對比

現(xiàn)在讓我們比較一下Thread.sleep()方法和對象的wait()方法的區(qū)別。

1. 暫停的對象不同:

  • Thread.sleep()方法是Thread類的方法,用于暫停當前線程的執(zhí)行。
  • wait()方法是Object類的方法,用于暫停當前線程,并釋放鎖,使其他線程可以訪問相同對象的臨界區(qū)。

2. 使用場景不同:

  • Thread.sleep()通常用于暫停當前線程的執(zhí)行,以模擬時間的流逝或?qū)崿F(xiàn)線程的定時等待。
  • wait()通常用于線程之間的協(xié)作,允許一個線程等待另一個線程的通知或信號。

3. 鎖的釋放情況不同:

  • Thread.sleep()不會釋放任何鎖,線程休眠期間其他線程無法獲得鎖。
  • wait()方法會釋放對象的鎖,讓其他線程有機會進入對象的臨界區(qū)。

4. 喚醒方式不同:

  • Thread.sleep()不需要其他線程來喚醒,線程會在休眠時間結(jié)束后自動恢復(fù)執(zhí)行。
  • wait()需要其他線程調(diào)用相同對象的notify()notifyAll()方法來喚醒等待的線程。

5. 異常處理不同:

  • Thread.sleep()可以拋出InterruptedException異常,需要進行異常處理。
  • wait()方法也可以拋出InterruptedException異常,需要進行異常處理。

示例代碼

讓我們繼續(xù)之前的示例,演示如何使用wait()notify()來實現(xiàn)線程的協(xié)作。

public class WaitNotifyExample {
    public static void main(String[] args) {
        final Object lock = new Object();
        Thread thread1 = new Thread(new Runnable() {
            public void run() {
                synchronized (lock) {
                    System.out.println("Thread 1: Waiting...");
                    try {
                        lock.wait(); // 等待被喚醒
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("Thread 1: Resumed.");
                }
            }
        });
        Thread thread2 = new Thread(new Runnable() {
            public void run() {
                synchronized (lock) {
                    try {
                        Thread.sleep(2000); // 等待2秒
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("Thread 2: Waking up Thread 1...");
                    lock.notify(); // 喚醒等待的線程
                }
            }
        });
        thread1.start();
        thread2.start();
    }
}

在這個續(xù)篇示例中,thread1使用wait()方法等待被thread2喚醒,而thread2使用Thread.sleep()方法休眠2秒后喚醒thread1。這個示例演示了Thread.sleep()wait()在協(xié)作中的不同用法。

結(jié)語

Thread.sleep()方法和對象的wait()方法都可以讓線程暫停執(zhí)行,但它們有不同的用途和行為。選擇哪種方式取決于你的需求和場景。希望本文能夠幫助你更好地理解這兩種方法的區(qū)別,以及如何在多線程編程中使用它們。

以上就是java線程Thread.sleep()對比對象的wait示例解析的詳細內(nèi)容,更多關(guān)于java線程Thread.sleep對象wait的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決Lombok使用@Builder無法build父類屬性的問題

    解決Lombok使用@Builder無法build父類屬性的問題

    這篇文章主要介紹了解決Lombok使用@Builder無法build父類屬性的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Spring:如何使用枚舉參數(shù)

    Spring:如何使用枚舉參數(shù)

    這篇文章主要介紹了springboot枚舉類型傳遞的步驟,幫助大家更好的理解和學(xué)習(xí)使用springboot,感興趣的朋友可以了解下,希望能給你帶來幫助
    2021-08-08
  • JDK的下載、安裝與部署圖文教程

    JDK的下載、安裝與部署圖文教程

    這篇文章主要為大家詳細介紹了JDK的下載、安裝與部署圖文教程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Feign利用自定義注解實現(xiàn)路徑轉(zhuǎn)義詳解

    Feign利用自定義注解實現(xiàn)路徑轉(zhuǎn)義詳解

    這篇文章主要講解一下如何通過注解實現(xiàn)對路由中的路徑進行自定義編碼,文中的示例代碼講解詳細,對我們學(xué)習(xí)或工作有一定的幫助,需要的可以參考一下
    2022-06-06
  • 用java實現(xiàn)跳動的小球示例代碼

    用java實現(xiàn)跳動的小球示例代碼

    這篇文章主要介紹了用java實現(xiàn)跳動的小球,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • SpringAop的依賴注入方式

    SpringAop的依賴注入方式

    文章介紹了Spring框架的依賴注入(DI)和面向切面編程(AOP)的基本概念和實現(xiàn)方式,Spring通過IOC容器管理Bean的創(chuàng)建和依賴注入,并提供了多種AOP實現(xiàn)方式,包括代理機制和配置選項
    2025-02-02
  • 詳解spring boot starter redis配置文件

    詳解spring boot starter redis配置文件

    spring-boot-starter-Redis主要是通過配置RedisConnectionFactory中的相關(guān)參數(shù)去實現(xiàn)連接redis service。下面通過本文給大家介紹在spring boot的配置文件中redis的基本配置,需要的的朋友參考下
    2017-07-07
  • Springboot整合ActiveMQ實現(xiàn)消息隊列的過程淺析

    Springboot整合ActiveMQ實現(xiàn)消息隊列的過程淺析

    昨天仔細研究了activeMQ消息隊列,也遇到了些坑,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合ActiveMQ的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • 詳解Log4j 日志文件存放位置設(shè)置

    詳解Log4j 日志文件存放位置設(shè)置

    這篇文章主要介紹了詳解Log4j 日志文件存放位置設(shè)置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Java中如何獲取文件的上級目錄

    Java中如何獲取文件的上級目錄

    這篇文章主要介紹了Java中如何獲取文件的上級目錄問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評論

五家渠市| 临猗县| 西华县| 马尔康县| 临漳县| 苏尼特左旗| 洪江市| 抚州市| 濮阳县| 新乡市| 紫金县| 泸水县| 双柏县| 无极县| 五峰| 邯郸县| 和平区| 洪雅县| 霍州市| 汉寿县| 枝江市| 延边| 全州县| 东莞市| 玛曲县| 阳朔县| 乡宁县| 岐山县| 垦利县| 日土县| 肇东市| 湛江市| 南召县| 常德市| 前郭尔| 涟源市| 湖南省| 西宁市| 滦平县| 盐亭县| 清涧县|