您的位置:首页 > 编程语言 > Java开发

【Java】使用Junit测试线程过程中出现的小问题

2015-06-09 15:37 645 查看
本文内容介绍在使用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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: