@Test 单测方法和main方法
在做一个多线程测试的时候发现的一个比较好玩的问题,在@Test的单测方法中开启了两个线程,本来应该在B()方法中的打印,没打出来,看了一下单测方法的线程是Thread[main,5,main],这方法开启的是main线程。
网上一些人的观点是单测方法结束的时候会把里面的资源释放了,导致里面线程提前结束。
public class 多线程测试01 {
int a ;
boolean flag ;
public static void main(String[] agrs) {
多线程测试01 shen = new 多线程测试01();
new Thread(new Runnable() {
@Override
public void run() {
shen.A();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
shen.B();
}
}).start();
}
//@Test 单测方法有一个问题,当单测方法结束的时候里面的线程也要结束,不管是不是执行完成
//结论不要在@Test开启线程
@Test
public void play() {
多线程测试01 shen = new 多线程测试01();
new Thread(new Runnable() {
@Override
public void run() {
shen.A();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
shen.B();
}
}).start();
System.out.println(Thread.currentThread());
}
public void A() {
// try {
// Thread.sleep(100);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
a = 1;
flag = true;
}
public void B() {
if (flag) {
System.out.println("flag = true " + a);
} else if(!flag){
System.out.println("falg = false " + a);
}
}
}
结论:尽量不要在test开启新线程。