junit对多线程测试和sleep的支持不太好,碰到这些情况的测试时,尽量避免使用junit,最好直接使用一个main函数来测试。
因为junit执行的程序必须是激活状态的。而sleep是睡眠状态,一旦没有其他激活状态的线程,junit程序就会自动退出。
如下:
import org.junit.Test;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;
public class Test14BlockingQueue {
/**
* 输出如下:
* start to sleep
* 1
* finish sleep
*/
public static void main(String[] args) {
SynchronousQueue<String> synchronousQueue = new SynchronousQueue<>();
new Thread(() -> {
try{
System.out.println("start to sleep");
synchronousQueue.put("1");
System.out.println("finish sleep");
}catch (Exception ex){
ex.printStackTrace();
}
}).start();
new Thread(() -> {
try{
TimeUnit.SECONDS.sleep(1);
System.out.println(synchronousQueue.take());
}catch (Exception ex){
ex.printStackTrace();
}
}).start();
}
/**
* 输出如下:
* start to sleep
*/
@Test
public void test(){
SynchronousQueue<String> synchronousQueue = new SynchronousQueue<>();
new Thread(() -> {
try{
System.out.println("start to sleep");
synchronousQueue.put("1");
System.out.println("finish sleep");
}catch (Exception ex){
ex.printStackTrace();
}
}).start();
new Thread(() -> {
try{
TimeUnit.SECONDS.sleep(1);
System.out.println(synchronousQueue.take());
}catch (Exception ex){
ex.printStackTrace();
}
}).start();
}
}