日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

JUnit单元测试中多线程的坑

發(fā)布時(shí)間:2025/3/15 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JUnit单元测试中多线程的坑 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、JUnit單元測(cè)試方法不輸出

在JUnit的@Test方法中啟用多線(xiàn)程,新啟動(dòng)的線(xiàn)程會(huì)隨著@Test主線(xiàn)程的死亡而不輸出

二、解決方法

  • 在@Test方法中每創(chuàng)建一個(gè)線(xiàn)程,就join一下,這樣我們新建的線(xiàn)程不死亡,Test主線(xiàn)程也不會(huì)死亡
  • 讓主線(xiàn)程睡眠一會(huì),等待其它線(xiàn)程結(jié)束后本線(xiàn)程在結(jié)束
  • 使用CountLatch等同步器同步一下,讓主線(xiàn)程等其它線(xiàn)程結(jié)束后在結(jié)束
  • 其它方法,總之就是讓@Test的線(xiàn)程等待我們新建的線(xiàn)程運(yùn)行結(jié)束后再結(jié)束
    • 方法1 Thread.join()
    @Testpublic void testMultiThread(){Thread thread = new Thread(() -> {try {TimeUnit.SECONDS.sleep(3);System.out.println("子線(xiàn)程執(zhí)行完畢");} catch (InterruptedException e) {e.printStackTrace();}});thread.start();try {thread.join();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("@Test線(xiàn)程執(zhí)行完畢");}輸出: 子線(xiàn)程執(zhí)行完畢@Test線(xiàn)程執(zhí)行完畢

    可以看到Test線(xiàn)程會(huì)在子線(xiàn)程執(zhí)行完之后再結(jié)束。如果有多個(gè)子線(xiàn)程,就讓每個(gè)子線(xiàn)程都join一下,這樣Test線(xiàn)程就會(huì)等待每一個(gè)子線(xiàn)程結(jié)束后再結(jié)束。

    • 方法2 線(xiàn)程睡眠
    @Testpublic void testMultiThread(){Thread thread = new Thread(() -> {try {TimeUnit.SECONDS.sleep(1);System.out.println("子線(xiàn)程執(zhí)行完畢");} catch (InterruptedException e) {e.printStackTrace();}});thread.start();try {TimeUnit.SECONDS.sleep(2);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("@Test線(xiàn)程執(zhí)行完畢");}輸出:子線(xiàn)程執(zhí)行完畢@Test線(xiàn)程執(zhí)行完畢
    • 方法3 CountLatch
    @Testpublic void testMultiThread(){CountDownLatch countDownLatch = new CountDownLatch(2);Thread thread = new Thread(() -> {try {TimeUnit.SECONDS.sleep(1);System.out.println("子線(xiàn)程1執(zhí)行完畢");countDownLatch.countDown();} catch (InterruptedException e) {e.printStackTrace();}});Thread thread2 = new Thread(() -> {try {TimeUnit.SECONDS.sleep(2);System.out.println("子線(xiàn)程2執(zhí)行完畢");countDownLatch.countDown();} catch (InterruptedException e) {e.printStackTrace();}});thread.start();thread2.start();try {countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("@Test線(xiàn)程執(zhí)行完畢");}輸出:子線(xiàn)程1執(zhí)行完畢子線(xiàn)程2執(zhí)行完畢@Test線(xiàn)程執(zhí)行完畢

    文章轉(zhuǎn)自

    總結(jié)

    以上是生活随笔為你收集整理的JUnit单元测试中多线程的坑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。