欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

1. sleep()

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

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

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

示例用法:

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

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

當(dāng)調(diào)用 sleep() 方法時(shí),當(dāng)前線程會(huì)進(jìn)入 TIMED_WAITING 狀態(tài),直到指定的時(shí)間到達(dá)或者被中斷(InterruptedException)。

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

2. wait()

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

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

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

示例用法:

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

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

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

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é)

- 來(lái)源與使用對(duì)象:

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

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

- 鎖的釋放:

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

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

- 喚醒機(jī)制:

  - sleep() 時(shí)間到達(dá)或者被中斷時(shí)會(huì)自動(dòng)喚醒。

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

- 異常處理:

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

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

總結(jié)

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

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

相關(guān)文章

  • springboot引入druid解析sql的過(guò)程

    springboot引入druid解析sql的過(guò)程

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

    Java SPEL表達(dá)式注入漏洞原理解析

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

    Java中clone方法使用筆記

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

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

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

    Springboot+devtools配置熱部署過(guò)程

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論