亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java面試題篇之Sleep()方法與Wait()方法的區(qū)別詳解

 更新時間:2024年07月23日 08:55:28   作者:guicai_guojia  
這篇文章主要給大家介紹了關于Java面試題篇之Sleep()方法與Wait()方法區(qū)別的相關資料,wait()是Object類中的方法,而sleep()是Thread類中的靜態(tài)方法,wait()方法用于多個線程之間的協(xié)作和通信,而sleep()方法用于線程的休眠,需要的朋友可以參考下

在 Java 中,sleep() 和 wait() 方法都可以用來控制線程的執(zhí)行順序或等待特定條件的發(fā)生,但它們有著不同的使用場景和行為:

1. sleep()

- sleep() 方法來自于 Thread 類,用于讓當前線程暫停執(zhí)行一段時間,以毫秒為單位。

- 調(diào)用 sleep() 方法會讓線程進入阻塞狀態(tài),但不會釋放鎖。

- 通常用于模擬時間間隔、節(jié)流處理、或者簡單的等待。

示例用法:

try {
    Thread.sleep(1000); // 暫停當前線程1秒鐘
} catch (InterruptedException e) {
    e.printStackTrace();
}

sleep() 方法是一個本地方法(native method),它會調(diào)用操作系統(tǒng)提供的功能來使當前線程休眠指定的毫秒數(shù)。

當調(diào)用 sleep() 方法時,當前線程會進入 TIMED_WAITING 狀態(tài),直到指定的時間到達或者被中斷(InterruptedException)。

public static native void sleep(long millis) throws InterruptedException;

2. wait()

- wait() 方法來自于 Object 類,用于在多線程環(huán)境下實現(xiàn)線程間的協(xié)調(diào)與通信。

- 調(diào)用 wait() 方法會讓線程釋放對象鎖,并且進入等待狀態(tài),直到其他線程調(diào)用相同對象上的 notify() 或 notifyAll() 方法來喚醒它,或者等待時間到達。

- 必須在同步塊或同步方法中調(diào)用 wait() 方法,否則會拋出 IllegalMonitorStateException 異常。

示例用法:

synchronized (sharedObject) {
    while (!condition) {
        try {
            sharedObject.wait(); // 等待直到條件滿足
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

wait() 方法的不同重載允許在等待時設置超時時間。

當調(diào)用 wait() 方法時,當前線程釋放對象的鎖,并進入 WAITING 或者 TIMED_WAITING 狀態(tài),直到被其他線程調(diào)用相同對象的 notify() 或 notifyAll() 方法喚醒,或者等待超時。

public final void wait() throws InterruptedException {
    wait(0);
}

public final native void wait(long timeout) throws InterruptedException;

public final void wait(long timeout, int nanos) throws InterruptedException {
    if (timeout < 0) {
        throw new IllegalArgumentException("timeout value is negative");
    }
    if (nanos < 0 || nanos > 999999) {
        throw new IllegalArgumentException("nanosecond timeout value out of range");
    }
    if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
        timeout++;
    }

    wait(timeout);
}

區(qū)別總結(jié)

- 來源與使用對象:

  - sleep() 是 Thread 類的靜態(tài)方法,用于讓當前線程休眠一段時間。

  - wait() 是 Object 類的方法,用于線程間的協(xié)調(diào)和通信。

- 鎖的釋放:

  - sleep() 不會釋放鎖,線程仍然持有鎖。

  - wait() 會釋放對象鎖,讓其他線程可以訪問這個對象的同步方法或塊。

- 喚醒機制:

  - sleep() 時間到達或者被中斷時會自動喚醒。

  - wait() 需要其他線程調(diào)用相同對象的 notify() 或 notifyAll() 方法來喚醒。

- 異常處理:

  - sleep() 方法的中斷異常是 InterruptedException。

  - wait() 方法的中斷異常也是 InterruptedException,但是在 wait() 中使用時,建議使用循環(huán)檢查條件來避免虛假喚醒。

總結(jié)

sleep() 用于線程暫停執(zhí)行一段時間,適用于控制時間間隔;wait() 用于多線程間的協(xié)調(diào)和通信,適用于等待特定條件的發(fā)生。在使用時需要根據(jù)具體場景選擇合適的方法,并理解它們的不同行為和特點。

到此這篇關于Java面試題篇之Sleep()方法與Wait()方法區(qū)別的文章就介紹到這了,更多相關Java Sleep()方法與Wait()方法的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • springboot引入druid解析sql的過程

    springboot引入druid解析sql的過程

    在開發(fā)中,有時我們可能會需要獲取SQL中的表名,那么因為不同的數(shù)據(jù)源類型SQL會存在部分差異,那么我們就可以使用alibaba 的druid包實現(xiàn)不同的數(shù)據(jù)源類型的sql解析,需要的朋友可以參考下
    2023-08-08
  • Java SPEL表達式注入漏洞原理解析

    Java SPEL表達式注入漏洞原理解析

    SpEL簡稱Spring表達式語言,在Spring 3中引入,SpEL能在運行時構(gòu)建復雜表達式、存取對象圖屬性、對象方法調(diào)用等等,可以與基于XML和基于注解的Spring配置還有bean定義一起使用,本文給大家介紹Java SPEL表達式注入漏洞原理研究,感興趣的朋友一起看看吧
    2023-10-10
  • Java中clone方法使用筆記

    Java中clone方法使用筆記

    clone顧名思義是復制,在Java語言中,clone方法被對象調(diào)用,所以會復制對象,下面這篇文章主要給大家介紹了關于Java中clone方法使用的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • Spring解讀@Component和@Configuration的區(qū)別以及源碼分析

    Spring解讀@Component和@Configuration的區(qū)別以及源碼分析

    通過實例分析@Component和@Configuration注解的區(qū)別,核心在于@Configuration會通過CGLIB代理確保Bean的單例,而@Component不會,在Spring容器中,使用@Configuration注解的類會被CGLIB增強,保證了即使在同一個類中多次調(diào)用@Bean方法
    2024-10-10
  • Springboot+devtools配置熱部署過程

    Springboot+devtools配置熱部署過程

    SpringBoot提供的spring-boot-devtools模塊可以實現(xiàn)應用的熱部署,極大提升開發(fā)效率,通過添加POM依賴、配置yml文件、使用IDE快捷鍵等步驟,可以無需手動重啟即可自動加載變更,這種方式不僅適用于靜態(tài)文件的自動加載,也適用于整個SpringBoot工程,是提高開發(fā)效率的有效手段
    2024-11-11
  • SpringBoot監(jiān)控API請求耗時的6中解決解決方案

    SpringBoot監(jiān)控API請求耗時的6中解決解決方案

    本文介紹SpringBoot中記錄API請求耗時的6種方案,包括手動埋點、AOP切面、攔截器、Filter、事件監(jiān)聽、Micrometer+Prometheus,具有一定的參考價值,感興趣的可以了解一下
    2025-07-07
  • 詳解Spring-Boot中如何使用多線程處理任務

    詳解Spring-Boot中如何使用多線程處理任務

    本篇文章主要介紹了詳解Spring-Boot中如何使用多線程處理任務,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • 實例講解Java中random.nextInt()與Math.random()的基礎用法

    實例講解Java中random.nextInt()與Math.random()的基礎用法

    今天小編就為大家分享一篇關于實例講解Java中random.nextInt()與Math.random()的基礎用法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 在spring中使用自定義注解注冊監(jiān)聽器的方法

    在spring中使用自定義注解注冊監(jiān)聽器的方法

    本篇文章主要介紹了在spring中使用自定義注解注冊監(jiān)聽器的方法,本文就是在分析監(jiān)聽器回調(diào)原理的基礎上,在spring環(huán)境中使用自定義的注解實現(xiàn)一個監(jiān)聽器。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 內(nèi)存屏障由來及實現(xiàn)思路

    內(nèi)存屏障由來及實現(xiàn)思路

    這篇文章主要為大家詳細介紹了內(nèi)存屏障由來及實現(xiàn)思路的詳細講解,讓大家徹底的理解內(nèi)存屏障,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-01-01

最新評論