Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当executor遇到Thread.sleep时,为什么线程结束时没有睡眠或抛出InterruptedException?_Java_Multithreading_Junit_Executorservice_Thread Sleep - Fatal编程技术网

Java 当executor遇到Thread.sleep时,为什么线程结束时没有睡眠或抛出InterruptedException?

Java 当executor遇到Thread.sleep时,为什么线程结束时没有睡眠或抛出InterruptedException?,java,multithreading,junit,executorservice,thread-sleep,Java,Multithreading,Junit,Executorservice,Thread Sleep,我不知道为什么junit有以下行为: 当我将一个线程提交到执行器(fixedThreadPool或其他)中,而该线程具有睡眠行为(thread.sleep())时,我发现该线程立即结束!没有睡眠,没有中断 我想知道为什么 (我知道下面的设计不好,但我只想描述一下上面的问题) @测试 公共测试(){ ExecutorService cachedThreadPool= 执行者。newFixedThreadPool(10); //Executors.newCachedThreadPool(); 对于(

我不知道为什么junit有以下行为:

当我将一个线程提交到执行器(fixedThreadPool或其他)中,而该线程具有睡眠行为(thread.sleep())时,我发现该线程立即结束!没有睡眠,没有中断

我想知道为什么

(我知道下面的设计不好,但我只想描述一下上面的问题)

@测试
公共测试(){
ExecutorService cachedThreadPool=
执行者。newFixedThreadPool(10);
//Executors.newCachedThreadPool();
对于(int i=0;i<1000;i++){
最终int指数=i;
cachedThreadPool.execute(新的Runnable(){
public void run(){
系统输出打印项次(索引);
试试{
睡眠(5000);
System.out.println(索引+“”);
}捕获(中断异常e){
e、 printStackTrace();
}  
}  
});  
}
//无论您是否调用shutdown,上述程序都会很快结束。
cachedThreadPool.shutdown();
}
上面的程序不打印任何数字+“?”,很奇怪。 但是,如果上面的方法在main方法中运行(我的意思是:publicstaticvoidmain(String[]args)),则该行为是正常的,线程将处于休眠状态,并且可以打印“\u1”

我想知道为什么?junit框架中发生了什么?如果是这样的话,我不能使用junit来测试涉及执行器的方法吗

junit版本是4.12

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

朱尼特
朱尼特
4.12

是的,因为您没有等待计划完成的任务。如果您有其他单元测试,您创建的线程仍将在后台执行,但您的测试将完成,因为您没有告诉它做任何其他事情。如果这是您唯一的测试,那么没有任何东西可以让进程保持活动状态,因此测试套件将在没有线程输出的情况下完成


如果您在关机后调用,那么它将等待所有线程完成测试。

啊,我明白了!您的意思是,Junit的主线程结束了,因此,这个测试单元中的线程结束了。
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>