生活随笔
收集整理的這篇文章主要介紹了
JUnit单元测试中多线程的坑
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、JUnit單元測試方法不輸出
在JUnit的@Test方法中啟用多線程,新啟動的線程會隨著@Test主線程的死亡而不輸出
二、解決方法
在@Test方法中每創建一個線程,就join一下,這樣我們新建的線程不死亡,Test主線程也不會死亡讓主線程睡眠一會,等待其它線程結束后本線程在結束使用CountLatch等同步器同步一下,讓主線程等其它線程結束后在結束其它方法,總之就是讓@Test的線程等待我們新建的線程運行結束后再結束
@Testpublic void testMultiThread(){Thread thread
= new Thread(() -> {try {TimeUnit.SECONDS
.sleep(3);System.out
.println("子線程執行完畢");} catch (InterruptedException e
) {e
.printStackTrace();}});thread
.start();try {thread
.join();} catch (InterruptedException e
) {e
.printStackTrace();}System.out
.println("@Test線程執行完畢");}輸出
: 子線程執行完畢
@Test線程執行完畢
可以看到Test線程會在子線程執行完之后再結束。如果有多個子線程,就讓每個子線程都join一下,這樣Test線程就會等待每一個子線程結束后再結束。
@Testpublic void testMultiThread(){Thread thread
= new Thread(() -> {try {TimeUnit.SECONDS
.sleep(1);System.out
.println("子線程執行完畢");} catch (InterruptedException e
) {e
.printStackTrace();}});thread
.start();try {TimeUnit.SECONDS
.sleep(2);} catch (InterruptedException e
) {e
.printStackTrace();}System.out
.println("@Test線程執行完畢");}輸出:子線程執行完畢
@Test線程執行完畢
@Testpublic void testMultiThread(){CountDownLatch countDownLatch
= new CountDownLatch(2);Thread thread
= new Thread(() -> {try {TimeUnit.SECONDS
.sleep(1);System.out
.println("子線程1執行完畢");countDownLatch
.countDown();} catch (InterruptedException e
) {e
.printStackTrace();}});Thread thread2
= new Thread(() -> {try {TimeUnit.SECONDS
.sleep(2);System.out
.println("子線程2執行完畢");countDownLatch
.countDown();} catch (InterruptedException e
) {e
.printStackTrace();}});thread
.start();thread2
.start();try {countDownLatch
.await();} catch (InterruptedException e
) {e
.printStackTrace();}System.out
.println("@Test線程執行完畢");}輸出:子線程
1執行完畢子線程
2執行完畢
@Test線程執行完畢
文章轉自
總結
以上是生活随笔為你收集整理的JUnit单元测试中多线程的坑的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。