标签: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); @Override public 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); @Test public 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); @Test public 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 block e.printStackTrace(); } } }
标签:java多线程测试
原文地址:http://mingsuper.blog.51cto.com/8269088/1660086