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

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

 更新時(shí)間:2021年05月25日 09:08:00   作者:Mr_Right_  
在測(cè)試一個(gè)文件轉(zhuǎn)換工具類的時(shí)候,發(fā)生一個(gè)有趣的現(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);
            }));

猜測(cè)可能原因

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

問題排查

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

打印結(jié)果如下:

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

總結(jié)

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

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

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

相關(guān)文章

  • Response.AddHeader案例講解

    Response.AddHeader案例講解

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

    Java實(shí)現(xiàn)的簡(jiǎn)易記事本

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

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

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

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

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

    Java中使用開源庫JSoup解析HTML文件實(shí)例

    這篇文章主要介紹了Java中使用開源庫JSoup解析HTML文件實(shí)例,Jsoup是一個(gè)開源的Java庫,它可以用于處理實(shí)際應(yīng)用中的HTML,比如常見的HTML格式化就可以用它來實(shí)現(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中各個(gè)版本的redis配置問題詳析

    spring boot中各個(gè)版本的redis配置問題詳析

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

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

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

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

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

    Java 二叉樹遍歷的常用方法

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

最新評(píng)論

务川| 乐业县| 刚察县| 新昌县| 隆昌县| 大港区| 南陵县| 伊川县| 聊城市| 永安市| 鄂托克前旗| 凤庆县| 新密市| 博野县| 博白县| 南涧| 错那县| 友谊县| 营山县| 广元市| 那坡县| 嵊州市| 固阳县| 双城市| 简阳市| 苏尼特右旗| 桐梓县| 武义县| 莱阳市| 乐业县| 南雄市| 犍为县| 拜城县| 景谷| 辽阳县| 文登市| 庆云县| 阳春市| 通海县| 陵川县| 台江县|