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

Junit測(cè)試多線程無(wú)法得到結(jié)果的問(wèn)題解決

 更新時(shí)間:2021年05月25日 09:08:00   作者:Mr_Right_  
在測(cè)試一個(gè)文件轉(zhuǎn)換工具類的時(shí)候,發(fā)生一個(gè)有趣的現(xiàn)象,同樣的輸入,使用Main函數(shù)可以正確解析,得到結(jié)果,使用Junit卻無(wú)法得到結(jié)果,神奇的是,即使捕獲Throwable,也無(wú)法捕獲到仍和異常。
class Main {
    public static void main(String[] args) {
        String trxFileDir = args[0];
        String targetDir = args[1];
        boolean isDecode = Boolean.parseBoolean(args[2]);
        ParseMojo parseMojo = new ParseMojo(trxFileDir,targetDir,isDecode);
        parseMojo.execute();
    }
}
    @Test
    public void executeEncode() {
        String trxFileDir = "E:\\MAE\\code\\MyMojoParse\\src\\main\\resources\\inputFile\\";
        String targetDir = "E:\\MAE\\code\\MyMojoParse\\src\\main\\resources\\outputFile\\";
        boolean isEncode = true;
        ParseMojo parser = new ParseMojo(trxFileDir, targetDir, isEncode);
        parser.execute();
    }

解析工具支持多線程,核心代碼如下

		 Arrays.stream(trxFiles).forEach(trx -> PARSE_POOL.execute(() -> {
                    convertToBinaryFile(trx);
            }));

猜測(cè)可能原因

首先當(dāng)前問(wèn)題和業(yè)務(wù)邏輯無(wú)關(guān),初步懷疑是多線程和UT的問(wèn)題,可能Junit進(jìn)行測(cè)試的時(shí)候,主線程結(jié)束會(huì)導(dǎo)致子線程也終止。

問(wèn)題排查

添加打印,查看文件的中斷處

打印結(jié)果如下:

很明顯,主進(jìn)程結(jié)束退出的時(shí)候,子進(jìn)程還沒(méi)有執(zhí)行完成,且每次執(zhí)行到的位置不一致

問(wèn)題原因

分析Junit源碼

    public static void main(String args[]) {
        TestRunner aTestRunner = new TestRunner();
        try {
            TestResult r = aTestRunner.start(args);
            if (!r.wasSuccessful()) {
                System.exit(FAILURE_EXIT);
            }
            System.exit(SUCCESS_EXIT);
        } catch (Exception e) {
            System.err.println(e.getMessage());
            System.exit(EXCEPTION_EXIT);
        }
    }

這是Junit運(yùn)行的入口,我們可以發(fā)現(xiàn),不管Junit測(cè)試是否成功,都會(huì)調(diào)用System.exit(),而這個(gè)方法會(huì)用來(lái)結(jié)束當(dāng)前正在運(yùn)行的java虛擬機(jī)。當(dāng)status=0時(shí)表示正常結(jié)束,status=1表示異常退出(強(qiáng)制退出,程序未執(zhí)行完也會(huì)退出)。JVM都關(guān)閉了,子線程還靠什么運(yùn)行呢?所以這就是問(wèn)題所在。

總結(jié)

在需要被測(cè)試類為多線程執(zhí)行任務(wù)的時(shí)候,注意不要直接使用Junit單元測(cè)試,可能由于系統(tǒng)退出,導(dǎo)致任務(wù)異常中斷。

注意要使并發(fā)工具類如 CountDownLatch、thread.join()保證任務(wù)中的線程全部執(zhí)行完畢。

以上就是Junit測(cè)試多線程無(wú)法得到結(jié)果的問(wèn)題解決的詳細(xì)內(nèi)容,更多關(guān)于Junit測(cè)試多線程無(wú)法得到結(jié)果的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺談springcloud常用依賴和配置

    淺談springcloud常用依賴和配置

    鑒于很多小伙伴常問(wèn)spring cloud常用依賴和配置,今天特地整理了本篇文章,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • java Socket簡(jiǎn)易聊天工具

    java Socket簡(jiǎn)易聊天工具

    這篇文章主要為大家詳細(xì)介紹了java Socket簡(jiǎn)易聊天工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • java如何判斷時(shí)間段是否交叉重疊

    java如何判斷時(shí)間段是否交叉重疊

    這篇文章主要介紹了java如何判斷時(shí)間段是否交叉重疊問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • mybatis-plus如何修改日志只打印SQL語(yǔ)句不打印查詢結(jié)果

    mybatis-plus如何修改日志只打印SQL語(yǔ)句不打印查詢結(jié)果

    這篇文章主要介紹了mybatis-plus如何修改日志只打印SQL語(yǔ)句不打印查詢結(jié)果問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 如何把char數(shù)組轉(zhuǎn)換成String

    如何把char數(shù)組轉(zhuǎn)換成String

    這篇文章主要介紹了如何把char數(shù)組轉(zhuǎn)換成String問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 淺談java switch如果case后面沒(méi)有break,會(huì)出現(xiàn)什么情況?

    淺談java switch如果case后面沒(méi)有break,會(huì)出現(xiàn)什么情況?

    這篇文章主要介紹了淺談java switch如果case后面沒(méi)有break,會(huì)出現(xiàn)什么情況?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨想小編過(guò)來(lái)看看吧
    2020-09-09
  • Java 如何利用緩沖流讀寫(xiě)文件

    Java 如何利用緩沖流讀寫(xiě)文件

    這篇文章主要介紹了Java 如何利用緩沖流讀寫(xiě)文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java?JVM方法分派模型靜態(tài)分派動(dòng)態(tài)分派全面講解

    java?JVM方法分派模型靜態(tài)分派動(dòng)態(tài)分派全面講解

    這篇文章主要為大家介紹了java?JVM方法分派模型靜態(tài)分派動(dòng)態(tài)分派全面講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • kafka與storm集群環(huán)境的安裝步驟詳解

    kafka與storm集群環(huán)境的安裝步驟詳解

    這篇文章主要給大家介紹了關(guān)于kafka與storm集群環(huán)境安裝步驟的相關(guān)資料,兩者并不是一定聯(lián)系的,寫(xiě)在一起主要是因?yàn)閮蓚€(gè)都是有zookeeper管理的,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • 利用Spring Session和redis對(duì)Session進(jìn)行共享詳解

    利用Spring Session和redis對(duì)Session進(jìn)行共享詳解

    這篇文章主要給大家介紹了關(guān)于利用Spring、Session和redis對(duì)Session進(jìn)行共享的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09

最新評(píng)論