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

Java線程休眠之sleep方法詳解

 更新時(shí)間:2024年01月18日 09:59:53   作者:小白不很白  
這篇文章主要介紹了Java線程休眠之sleep方法詳解,Thread?類中有一個(gè)靜態(tài)方法的sleep方法,當(dāng)該線程調(diào)用sleep方法后,就會(huì)暫時(shí)讓CPU的調(diào)度權(quán),但是監(jiān)視器資源比如鎖并不會(huì)釋放出去,需要的朋友可以參考下

讓線程睡眠的sleep方法

Thread 類中有一個(gè)靜態(tài)方法的sleep方法,當(dāng)該線程調(diào)用sleep方法后,就會(huì)暫時(shí)讓CPU的調(diào)度權(quán)。

但是監(jiān)視器資源比如鎖并不會(huì)釋放出去。在指定睡眠時(shí)間后,函數(shù)會(huì)正常返回。

如果線程在睡眠過程中如果如果調(diào)用了該線程的interrupt方法終端該線程,則會(huì)拋出sleep內(nèi)的InterruptedException異常而返回。

下面舉個(gè)例子,該線程在睡眠的擁有的監(jiān)視器并不會(huì)被釋放。

package com.example.demo.runnable.ChapterOne;
import java.util.concurrent.locks.ReentrantLock;
/**
 * @author 49800
 */
public class SleepTest {
    private static final ReentrantLock lock = new ReentrantLock();
    public static void main(String[] args) {
        Thread threadA = new Thread(() -> {
            lock.lock();
            try {
                System.out.println("ThreadA 在執(zhí)行了");
                Thread.sleep(10000);
                System.out.println("ThreadA 執(zhí)行完成了");
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                lock.unlock();
            }
        });
        Thread threadB = new Thread(() -> {
            lock.lock();
            try {
                System.out.println("ThreadB 在執(zhí)行了");
                Thread.sleep(10000);
                System.out.println("ThreadB 執(zhí)行完成了");
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                lock.unlock();
            }
        });
        threadA.start();
        threadB.start();
        System.out.println("Main 方法已經(jīng)在執(zhí)行了");
        try {
            threadA.join();
            threadB.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Main 方法已經(jīng)在執(zhí)行完成了");
    }
}

在這里插入圖片描述

上面用到了獨(dú)占鎖,獨(dú)占鎖就是當(dāng)一個(gè)線程在使用該鎖的時(shí)候,另一個(gè)線程必須等另一個(gè)線程釋放鎖后,下一個(gè)線程才能執(zhí)行。

這樣上面兩個(gè)線程就不會(huì)交叉執(zhí)行。從上面的執(zhí)行結(jié)果來看,當(dāng)某一線程在在開始執(zhí)行后。

執(zhí)行到sleep方法,就暫停十秒才會(huì)打印執(zhí)行完成。因?yàn)檎{(diào)用了join的方法,所以必須這兩個(gè)線程執(zhí)行完成后才能執(zhí)行main方法。

在線程睡眠時(shí),其他線程調(diào)用該線程的sleep方法,則會(huì)拋出異常。

package com.example.demo.runnable.ChapterOne;
/**
 * @author 49800
 */
public class SleepExceptionTest {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            try {
                System.out.println("開始執(zhí)行");
                Thread.sleep(10000);
                System.out.println("執(zhí)行完畢");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        thread.start();
        try {
            // Main 方法睡眠3s
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        thread.interrupt();
    }
}

結(jié)果:

在這里插入圖片描述

子線程在睡眠期間,主線程中斷了他,所以在主線程在調(diào)用sleep方法后拋出了異常。

另外需要注意的事sleep(long millis)是毫秒值,當(dāng)傳入的是一個(gè)負(fù)數(shù)的時(shí)候也是會(huì)拋出異常的。

到此這篇關(guān)于Java線程休眠之sleep方法詳解的文章就介紹到這了,更多相關(guān)Java線程休眠內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java JDK 動(dòng)態(tài)代理的使用方法示例

    Java JDK 動(dòng)態(tài)代理的使用方法示例

    Java 動(dòng)態(tài)代理機(jī)制以巧妙的方式近乎完美地實(shí)踐了代理模式的設(shè)計(jì)理念。下面這篇文章主要給大家分享了關(guān)于Java JDK 動(dòng)態(tài)代理的使用方法示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • javaweb 項(xiàng)目初始配置的方法步驟

    javaweb 項(xiàng)目初始配置的方法步驟

    本文主要介紹了javaweb 項(xiàng)目初始配置的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • SpringBoot整合Shiro的方法詳解

    SpringBoot整合Shiro的方法詳解

    Apache?Shiro是一個(gè)java安全(權(quán)限)框架,Shiro可以非常容易的開發(fā)出足夠好的應(yīng)用,其不僅可以用在javase環(huán)境,也可以用在javaee環(huán)境。本文介紹了SpringBoot整合Shiro的方法,需要的可以參考一下
    2022-05-05
  • Spring中緩存注解@Cache的使用詳解

    Spring中緩存注解@Cache的使用詳解

    這篇文章主要介紹了Spring中緩存注解@Cache的使用詳解,使用注解對(duì)數(shù)據(jù)進(jìn)行緩存功能的框架,只需要簡(jiǎn)單地加一個(gè)注解,就能實(shí)現(xiàn)緩存功能,大大簡(jiǎn)化我們?cè)跇I(yè)務(wù)中操作緩存的代碼,需要的朋友可以參考下
    2023-07-07
  • 保證緩存和數(shù)據(jù)庫的數(shù)據(jù)一致性詳解

    保證緩存和數(shù)據(jù)庫的數(shù)據(jù)一致性詳解

    在實(shí)際開發(fā)過程中,緩存的使用頻率是非常高的,只要使用緩存和數(shù)據(jù)庫存儲(chǔ),就難免會(huì)出現(xiàn)雙寫時(shí)數(shù)據(jù)一致性的問題,本文主要介紹了如何保證緩存和數(shù)據(jù)庫的數(shù)據(jù)一致性,需要的小伙伴可以參考閱讀
    2023-04-04
  • JVM優(yōu)先級(jí)線程池做任務(wù)隊(duì)列的實(shí)現(xiàn)方法

    JVM優(yōu)先級(jí)線程池做任務(wù)隊(duì)列的實(shí)現(xiàn)方法

    這篇文章主要介紹了JVM優(yōu)先級(jí)線程池做任務(wù)隊(duì)列的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java-Redis-Redisson分布式鎖的功能使用及實(shí)現(xiàn)

    Java-Redis-Redisson分布式鎖的功能使用及實(shí)現(xiàn)

    這篇文章主要介紹了Java-Redis-Redisson-分布式鎖的功能使用及實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • SpringBoot整合Swagger框架過程解析

    SpringBoot整合Swagger框架過程解析

    這篇文章主要介紹了SpringBoot整合Swagger框架過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • springboot實(shí)現(xiàn)分段上傳功能的示例代碼

    springboot實(shí)現(xiàn)分段上傳功能的示例代碼

    這篇文章主要介紹了springboot實(shí)現(xiàn)分段上傳,包括文件上傳下載,斷點(diǎn)續(xù)傳,增量上傳功能,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • SpringBoot中使用Jsoup爬取網(wǎng)站數(shù)據(jù)的方法

    SpringBoot中使用Jsoup爬取網(wǎng)站數(shù)據(jù)的方法

    這篇文章主要介紹了SpringBoot中使用Jsoup爬取網(wǎng)站數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評(píng)論