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

Java如何判斷線程是否結(jié)束的三種方法

 更新時間:2022年03月16日 11:33:15   作者:y_index  
本文主要介紹了Java如何判斷線程是否結(jié)束的三種方法,主要介紹了三種方法,文中根據(jù)實例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下

方法1

通過Thread類中的isAlive()方法判斷線程是否處于活動狀態(tài)。

線程啟動后,只要沒有運行完畢,都會返回true。

【注】如果只是要等其他線程運行結(jié)束之后再繼續(xù)操作,可以執(zhí)行t.join(),即:在t執(zhí)行完畢前掛起。

方法2

通過Thread.activeCount()方法判斷當(dāng)前線程的線程組中活動線程的數(shù)目,為1時其他線程運行完畢。

方法3

通過java.util.concurrent.Executors中的方法創(chuàng)建一個線程池,用這個線程池來啟動線程。啟動所有要啟動的線程后,執(zhí)行線程池的shutdown()方法,即在所有線程執(zhí)行完畢后關(guān)閉線程池。然后通過線程池的isTerminated()方法,判斷線程池是否已經(jīng)關(guān)閉。線程池成功關(guān)閉,就意味著所有線程已經(jīng)運行完畢了。 

import java.util.concurrent.ExecutorService; ?
import java.util.concurrent.Executors; ?

public class Test { ?
?
? ? public static void main(String args[]) throws InterruptedException { ?
? ? ? ? ExecutorService exe = Executors.newFixedThreadPool(50); ?
? ? ? ? for (int i = 1; i <= 5; i++) { ?
? ? ? ? ? ? exe.execute(new SubThread(i)); ?
? ? ? ? } ?
? ? ? ? exe.shutdown(); ?
? ? ? ? while (true) { ?
? ? ? ? ? ? if (exe.isTerminated()) { ?
? ? ? ? ? ? ? ? System.out.println("結(jié)束了!"); ?
? ? ? ? ? ? ? ? break; ?
? ? ? ? ? ? } ?
? ? ? ? ? ? Thread.sleep(200); ?
? ? ? ? } ?
? ? } ?
}

判斷線程池中的線程是否全部執(zhí)行完畢的另外一種解決方案則是使用閉鎖(CountDownLatch)來實現(xiàn),CountDownLatch是一種靈活的閉鎖實現(xiàn),它可以使一個或多個線程等待一組事件發(fā)生。閉鎖狀態(tài)包括一個計數(shù)器,該計數(shù)器被初始化為一個正數(shù),表示需要等待的事件數(shù)量。countDown方法遞減計數(shù)器,表示有一個事件已經(jīng)發(fā)生了,而await方法等待計數(shù)器達(dá)到零,即表示需要等待的事情都已經(jīng)發(fā)生??梢允褂瞄]鎖來這樣設(shè)計程序達(dá)到目的:

public class CountDownLatchApproach {undefined
    public static void main(String[] args) throws IOException, InterruptedException {undefined
        final int nThreads = 10;
        final CountDownLatch endGate = new CountDownLatch(nThreads);
        final File stream = new File("c:\\temp\\stonefeng\\stream.txt");
        final OutputStream os = new FileOutputStream(stream);
        final OutputStreamWriter writer = new OutputStreamWriter(os);
        ExecutorService exec = Executors.newCachedThreadPool();
        for (int i = 0; i < nThreads; i++) {undefined
            final int num = i;
            Runnable task = new Runnable() {undefined
                @Override
                public void run() {undefined
                    try {undefined
                        writer.write(String.valueOf(num)+"\n");
                    } catch (IOException e) {undefined
                        e.printStackTrace();
                    } finally {undefined
                        endGate.countDown();
                    }
                }
            };
            exec.submit(task);
        }
        endGate.await();
        writer.write("---END---\n");
        writer.close();
    }
}

到此這篇關(guān)于Java如何判斷線程是否結(jié)束的三種方法的文章就介紹到這了,更多相關(guān)Java 判斷線程結(jié)束內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 圖解Java?ReentrantLock公平鎖和非公平鎖的實現(xiàn)

    圖解Java?ReentrantLock公平鎖和非公平鎖的實現(xiàn)

    ReentrantLock是Java并發(fā)中十分常用的一個類,具備類似synchronized鎖的作用。但是相比synchronized,?它具備更強的能力,同時支持公平鎖和非公平鎖。本文就來聊聊ReentrantLock公平鎖和非公平鎖的實現(xiàn),需要的可以參考一下
    2022-10-10
  • 基于springboot+vue實現(xiàn)垃圾分類管理系統(tǒng)

    基于springboot+vue實現(xiàn)垃圾分類管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于springboot+vue實現(xiàn)垃圾分類管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • java實現(xiàn)遞歸文件列表的方法

    java實現(xiàn)遞歸文件列表的方法

    這篇文章主要介紹了java實現(xiàn)遞歸文件列表的方法,實例分析了java采用遞歸算法遍歷文件的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Java8時間接口LocalDateTime詳細(xì)用法

    Java8時間接口LocalDateTime詳細(xì)用法

    最近看別人項目源碼,發(fā)現(xiàn)Java8新的日期時間API很方便強大,所以整理了這篇文章,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • java 壓縮和解壓縮Zip、Jar、Gzip文件實例代碼

    java 壓縮和解壓縮Zip、Jar、Gzip文件實例代碼

    本文主要介紹java壓縮和解壓縮Zip、Jar、Gzip文件的知識,這里整理了相關(guān)資料,并附示例代碼有興趣的小伙伴可以參考下
    2016-09-09
  • MyBatis-Plus 與Druid 數(shù)據(jù)源操作

    MyBatis-Plus 與Druid 數(shù)據(jù)源操作

    SpringBoot框架集成MyBatis-Plus和Druid數(shù)據(jù)源,簡化了數(shù)據(jù)操作與監(jiān)控,MyBatis-Plus作為MyBatis的增強工具,自動實現(xiàn)CRUD操作,減少手寫SQL,提供分頁、邏輯刪除等功能,本文介紹MyBatis-Plus & Druid 數(shù)據(jù)源總結(jié),感興趣的朋友一起看看吧
    2024-09-09
  • JDK1.8新特性之方法引用 ::和Optional詳解

    JDK1.8新特性之方法引用 ::和Optional詳解

    這篇文章主要介紹了JDK1.8新特性之方法引用 ::和Optional,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Spring Boot系列教程之死信隊列詳解

    Spring Boot系列教程之死信隊列詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot系列教程之死信隊列的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 解決IDEA上循環(huán)依賴報錯問題Error:java: Annotation processing is not supported for module cycles

    解決IDEA上循環(huán)依賴報錯問題Error:java: Annotation processing&n

    這篇文章主要介紹了解決IDEA上循環(huán)依賴報錯問題Error:java: Annotation processing is not supported for module cycles,具有很好的參考價值,希望對大家有所幫助
    2023-10-10
  • Java實現(xiàn)二維數(shù)組和稀疏數(shù)組之間的轉(zhuǎn)換

    Java實現(xiàn)二維數(shù)組和稀疏數(shù)組之間的轉(zhuǎn)換

    本文主要介紹了Java 二維數(shù)組和稀疏數(shù)組轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06

最新評論

西青区| 杭州市| 大洼县| 安化县| 突泉县| 临漳县| 荣昌县| 江安县| 湟源县| 绍兴市| 堆龙德庆县| 济宁市| 屏边| 西充县| 三江| 大关县| 常德市| 辽阳市| 新干县| 廉江市| 宁河县| 河曲县| 全南县| 岱山县| 余江县| 乡城县| 唐海县| 左云县| 鄂尔多斯市| 平山县| 温宿县| 上犹县| 南通市| 建阳市| 德安县| 疏附县| 闵行区| 荆门市| 水富县| 内乡县| 衡东县|