欧美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() 方法都可以用來控制線程的執(zhí)行順序或等待特定條件的發(fā)生,但它們有著不同的使用場景和行為:

1. sleep()

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

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

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

示例用法:

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

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

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

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

2. wait()

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

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

- 必須在同步塊或同步方法中調(diào)用 wait() 方法,否則會拋出 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)前線程釋放對象的鎖,并進(jìn)入 WAITING 或者 TIMED_WAITING 狀態(tài),直到被其他線程調(diào)用相同對象的 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é)

- 來源與使用對象:

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

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

- 鎖的釋放:

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

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

- 喚醒機(jī)制:

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

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

- 異常處理:

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

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

總結(jié)

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

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

相關(guān)文章

  • IntelliJ IDEA 設(shè)置代碼提示或自動補(bǔ)全的快捷鍵功能

    IntelliJ IDEA 設(shè)置代碼提示或自動補(bǔ)全的快捷鍵功能

    這篇文章主要介紹了IntelliJ IDEA 設(shè)置代碼提示或自動補(bǔ)全的快捷鍵功能,需要的朋友可以參考下
    2018-03-03
  • java selenium元素定位大全

    java selenium元素定位大全

    本文主要介紹java selenium元素定位,這里整理了selenium元素定位的相關(guān)資料,有興趣的小伙伴可以參考下
    2016-08-08
  • Java SpringMVC異常處理機(jī)制詳解

    Java SpringMVC異常處理機(jī)制詳解

    這篇文章主要介紹了springmvc如何進(jìn)行異常處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Spring @ComponentScan注解使用案例詳細(xì)講解

    Spring @ComponentScan注解使用案例詳細(xì)講解

    @ComponentScan注解的作用可以簡述為:將項(xiàng)目中所有被@Component注解直接或者間接標(biāo)記的類---->組裝成BeanDefinition---->然后以key=beanName, value=BeanDefinition的形式存儲,為后續(xù)生成bean對象做準(zhǔn)備
    2023-03-03
  • Java如何通過屬性名獲取Object對象屬性值

    Java如何通過屬性名獲取Object對象屬性值

    這篇文章主要介紹了Java如何通過屬性名獲取Object對象屬性值問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java基礎(chǔ)篇之反射機(jī)制示例詳解

    Java基礎(chǔ)篇之反射機(jī)制示例詳解

    反射是Java可以提供的一個(gè)靈活又強(qiáng)大的功能,使用Java反射,您可以知道這個(gè)類在運(yùn)行時(shí)具有什么屬性和方法,也可以修改屬性,調(diào)用方法,創(chuàng)建類的實(shí)例,這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)篇之反射機(jī)制的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • java使用BeanUtils.copyProperties方法對象復(fù)制同名字段類型不同賦值為空問題解決方案

    java使用BeanUtils.copyProperties方法對象復(fù)制同名字段類型不同賦值為空問題解決方案

    這篇文章主要給大家介紹了關(guān)于java使用BeanUtils.copyProperties方法對象復(fù)制同名字段類型不同賦值為空問題的解決方案,文中通過代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • SSM框架中entity mapper dao service controller層的使用

    SSM框架中entity mapper dao service controll

    這篇文章主要介紹了SSM框架中entity mapper dao service controller層的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringBoot設(shè)置接口超時(shí)的方法小結(jié)

    SpringBoot設(shè)置接口超時(shí)的方法小結(jié)

    這篇文章主要介紹了SpringBoot設(shè)置接口超時(shí)的方法小結(jié),包括配置文件,config配置類及相關(guān)示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 使用Java實(shí)現(xiàn)2048小游戲代碼實(shí)例

    使用Java實(shí)現(xiàn)2048小游戲代碼實(shí)例

    這篇文章主要介紹了使用Java實(shí)現(xiàn)2048小游戲代碼實(shí)例,2048 游戲是一款益智類游戲,玩家需要通過合并相同數(shù)字的方塊,不斷合成更大的數(shù)字,最終達(dá)到2048,游戲規(guī)則簡單,但挑戰(zhàn)性很高,需要玩家靈活運(yùn)用策略和計(jì)算能力,本文將使用Java代碼實(shí)現(xiàn),需要的朋友可以參考下
    2023-10-10

最新評論