標籤:java多線程測試
本文內容介紹在使用Junit進行線程測試的時候出現的一個小問題,自己簡單做一個記錄,以便後續查看
在使用java編寫多線程並發實驗程式時在Juint寫了測試程式,但並沒有得到預想的效果。
直接上代碼
線程類:
package sm.examples.threaddemo;import org.apache.log4j.Logger;public class Thread1 implements Runnable {private static final Logger logger = Logger.getLogger(Thread1.class);@Overridepublic void run() {int i = 0;while (true) {logger.info("-----in while------" + i++);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}if (i == 50) {break;}}}}
測試類別:
package sm.test;import org.apache.log4j.Logger;import org.junit.Test;import sm.examples.threaddemo.Thread1;public class TestThreadDemo {/** * Logger for this class */private static final Logger logger = Logger.getLogger(TestThreadDemo.class);@Testpublic void test(){Thread1 thread1 = new Thread1();Thread t1 = new Thread(thread1);Thread t2 = new Thread(thread1);t1.start();t2.start();}}
原本預想執行之後兩個線程會交替的在控制台列印出0-49,但實際上只是各自列印出了
[sm.examples.threaddemo.Thread1][Thread-0] - -----in while------0
[sm.examples.threaddemo.Thread1][Thread-1] - -----in while------0
使用main函數進行測試,實現了預想的效果。簡單思考了一下,感覺是測試類別中的test方法中啟動了兩個線程之後自己也結束了,所以啟動的線程在控制台也不能輸出內容了。
於是修改了一下代碼,在測試類別的test方法中加入休眠等待,在控制台輸出了預期效果。
修改後代碼:
package sm.test;import org.apache.log4j.Logger;import org.junit.Test;import sm.examples.threaddemo.Thread1;public class TestThreadDemo {/** * Logger for this class */private static final Logger logger = Logger.getLogger(TestThreadDemo.class);@Testpublic void test(){Thread1 thread1 = new Thread1();Thread t1 = new Thread(thread1);Thread t2 = new Thread(thread1);t1.start();t2.start();try {logger.info("in test");Thread.sleep(10000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
【java】使用Junit測試線程過程中出現的小問題