我们在使用junit做单元测试的时候,当使用多线程的时候,需注意当主线程退出,子线程也会退出。下面我们看一下这个例子。
- package cn.slimsmart.java.demo.thread.demo1;
-
- import junit.framework.TestCase;
-
- import org.junit.Test;
-
- public class JunitThread extends TestCase{
-
- @Test
- public void testRun(){
- Runnable task = new Runnable() {
- @Override
- public void run() {
- System.out.println("线程执行开始。。。");
- try {
- Thread.currentThread().sleep(3000);
- } catch (InterruptedException e) {
-
- e.printStackTrace();
- }
- System.out.println("线程执行结束。。。");
- }
- };
- new Thread(task).start();
- }
-
- }
当我们运行这个单元测试的时候,得到的结果却是:
并未打印“线程执行结束。。。”,这是由于主线退出后,子线程也立即退出。如果我们使用main去运行,运行结果包含结束语句,由于在缺省的情况下,虚拟机等待所有的线程结束程序才结束。守护线程例外,会随程序主动结束。
这样我们在new Thread(task).start();后面让主线sleep一段时间:
可以看到子线程运行结束。