今天想模仿抢购的案例,在单元测试中起了几个线程,每个线程都去购物,这样就达到了模仿的效果,但是在测试的时候发现,单元测试中并没有去调用线程中购物的方法。后面把他写到了Main方法中,才模拟完成。
自己又写了段测试代码如下
class BuyThread extends Thread{
@Override
public void run(){
System.out.println("线程执行开始。。。");
try {
Thread.currentThread().sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("线程执行结束。。。");
}
}
@Test
public void fun1(){
BuyThread buyThread = new BuyThread();
buyThread.start();
}
结果如图所示:
并没有输入线程结束的字样
**这是因为fun1
是单元测试线程,不是守护线程,虚拟机不会等待他执行,当fun1
线程结束之后,子线程立即结束。
但是main方法是缺省的,jvm虚拟机会等待所有的线程结束。
所以如果将线程的启动放到main方法中则会输出线程结束的字样**