Java教程

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

本文主要是介绍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();
    }
}
这篇关于java尽量不要用junit对多线程或sleep做测试的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!