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

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

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

方法1

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

線程啟動(dòng)后,只要沒(méi)有運(yùn)行完畢,都會(huì)返回true。

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

方法2

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

方法3

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

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)來(lái)實(shí)現(xiàn),CountDownLatch是一種靈活的閉鎖實(shí)現(xiàn),它可以使一個(gè)或多個(gè)線程等待一組事件發(fā)生。閉鎖狀態(tài)包括一個(gè)計(jì)數(shù)器,該計(jì)數(shù)器被初始化為一個(gè)正數(shù),表示需要等待的事件數(shù)量。countDown方法遞減計(jì)數(shù)器,表示有一個(gè)事件已經(jīng)發(fā)生了,而await方法等待計(jì)數(shù)器達(dá)到零,即表示需要等待的事情都已經(jīng)發(fā)生??梢允褂瞄]鎖來(lái)這樣設(shè)計(jì)程序達(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • elasticsearch開(kāi)發(fā)中data-streams使用解析

    elasticsearch開(kāi)發(fā)中data-streams使用解析

    這篇文章主要為大家介紹了elasticsearch開(kāi)發(fā)中data-streams使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • java中的匿名內(nèi)部類總結(jié)

    java中的匿名內(nèi)部類總結(jié)

    這篇文章主要介紹了 java中的匿名內(nèi)部類總結(jié)的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • java判斷一個(gè)字符串是否是小數(shù)的方法

    java判斷一個(gè)字符串是否是小數(shù)的方法

    在本篇文章里小編給大家整理的是關(guān)于java判斷一個(gè)字符串是否是小數(shù)的方法,有需要的朋友們學(xué)習(xí)下。
    2019-11-11
  • java中的return關(guān)鍵字使用解讀

    java中的return關(guān)鍵字使用解讀

    這篇文章主要介紹了java中的return關(guān)鍵字使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 淺談Java動(dòng)態(tài)代理的實(shí)現(xiàn)

    淺談Java動(dòng)態(tài)代理的實(shí)現(xiàn)

    最近,小組同事做代碼改造時(shí),使用到了動(dòng)態(tài)代理,自己閱讀時(shí),發(fā)現(xiàn)對(duì)代理這種設(shè)計(jì)模式都不怎么清楚,導(dǎo)致理解代碼也很困難 自己唯一能看懂的,大概就是handler中的invoke方法 ,文中作出了非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-05-05
  • 排查Failed?to?validate?connection?com.mysql.cj.jdbc.ConnectionImpl

    排查Failed?to?validate?connection?com.mysql.cj.jdbc.Connec

    這篇文章主要介紹了Failed?to?validate?connection?com.mysql.cj.jdbc.ConnectionImpl問(wèn)題排查,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2023-02-02
  • SpringAop切入點(diǎn)execution表達(dá)式的深入講解

    SpringAop切入點(diǎn)execution表達(dá)式的深入講解

    Spring AOP 可能會(huì)經(jīng)常使用 execution切入點(diǎn)指示符,下面這篇文章主要給大家介紹了關(guān)于SpringAop切入點(diǎn)execution表達(dá)式的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用詳解

    MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用詳解

    這篇文章主要介紹了MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 全面理解Java中的引用傳遞和值傳遞

    全面理解Java中的引用傳遞和值傳遞

    這篇文章主要介紹了全面理解Java中的引用傳遞和值傳遞,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟

    手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟

    這篇文章主要介紹了手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論