本文内容介绍在使用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();
}
}
}
转载于:https://blog.51cto.com/mingsuper/1660086