java尽量不要用junit对多线程或sleep做测试

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();
    }
}
上一篇:.net core3.1 使PuppeteerSharp截图一个窗体多个窗口截图版


下一篇:if ex