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

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

 更新時間:2021年05月25日 09:08:00   作者:Mr_Right_  
在測試一個文件轉(zhuǎn)換工具類的時候,發(fā)生一個有趣的現(xiàn)象,同樣的輸入,使用Main函數(shù)可以正確解析,得到結(jié)果,使用Junit卻無法得到結(jié)果,神奇的是,即使捕獲Throwable,也無法捕獲到仍和異常。
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);
            }));

猜測可能原因

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

問題排查

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

打印結(jié)果如下:

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

問題原因

分析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運行的入口,我們可以發(fā)現(xiàn),不管Junit測試是否成功,都會調(diào)用System.exit(),而這個方法會用來結(jié)束當前正在運行的java虛擬機。當status=0時表示正常結(jié)束,status=1表示異常退出(強制退出,程序未執(zhí)行完也會退出)。JVM都關(guān)閉了,子線程還靠什么運行呢?所以這就是問題所在。

總結(jié)

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

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

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

相關(guān)文章

  • Response.AddHeader案例講解

    Response.AddHeader案例講解

    這篇文章主要介紹了Response.AddHeader案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java實現(xiàn)的簡易記事本

    Java實現(xiàn)的簡易記事本

    這篇文章主要介紹了Java實現(xiàn)的簡易記事本,較為詳細的分析了基于java實現(xiàn)記事本程序的完整過程,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • java實現(xiàn)輸出任意整數(shù)的每一位

    java實現(xiàn)輸出任意整數(shù)的每一位

    這篇文章主要介紹了java實現(xiàn)輸出任意整數(shù)的每一位,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring為什么要用三級緩存解決循環(huán)依賴呢

    Spring為什么要用三級緩存解決循環(huán)依賴呢

    本文主要介紹了Spring如何使用三級緩存解決循環(huán)依賴問題,本文為了方便說明,先設(shè)置兩個業(yè)務(wù)層對象,命名為AService和BService,結(jié)合示例給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-01-01
  • Java中使用開源庫JSoup解析HTML文件實例

    Java中使用開源庫JSoup解析HTML文件實例

    這篇文章主要介紹了Java中使用開源庫JSoup解析HTML文件實例,Jsoup是一個開源的Java庫,它可以用于處理實際應(yīng)用中的HTML,比如常見的HTML格式化就可以用它來實現(xiàn),需要的朋友可以參考下
    2014-09-09
  • skywalking分布式服務(wù)調(diào)用鏈路追蹤APM應(yīng)用監(jiān)控

    skywalking分布式服務(wù)調(diào)用鏈路追蹤APM應(yīng)用監(jiān)控

    這篇文章主要為大家介紹了skywalking分布式服務(wù)調(diào)用鏈路追蹤APM應(yīng)用監(jiān)控的功能使用說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • spring boot中各個版本的redis配置問題詳析

    spring boot中各個版本的redis配置問題詳析

    這篇文章主要給大家介紹了關(guān)于spring boot中各個版本的redis配置問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • Java中System.currentTimeMillis()計算方式與時間單位轉(zhuǎn)換講解

    Java中System.currentTimeMillis()計算方式與時間單位轉(zhuǎn)換講解

    本文詳細講解了Java中System.currentTimeMillis()計算方式與時間單位轉(zhuǎn)換,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 利用synchronized實現(xiàn)線程同步的案例講解

    利用synchronized實現(xiàn)線程同步的案例講解

    這篇文章主要介紹了利用synchronized實現(xiàn)線程同步的案例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java 二叉樹遍歷的常用方法

    Java 二叉樹遍歷的常用方法

    二叉樹的遍歷可以說是解決二叉樹問題的基礎(chǔ)。我們常用的遍歷方式無外乎就四種 前序遍歷、中序遍歷、后續(xù)遍歷、層次遍歷 這四種。
    2021-05-05

最新評論

灵山县| 沙坪坝区| 犍为县| 治县。| 阿拉善左旗| 信宜市| 屏东县| 齐河县| 焦作市| 大悟县| 安丘市| 定日县| 米泉市| 房山区| 永济市| 翁牛特旗| 邵武市| 项城市| 红安县| 从化市| 连平县| 龙川县| 越西县| 汶川县| 祁门县| 黄山市| 贵南县| 芦溪县| 前郭尔| 丹凤县| 沙雅县| 大厂| 秦安县| 庆阳市| 怀远县| 东乡族自治县| 朝阳市| 科技| 皮山县| 获嘉县| 灵丘县|