executorservice 没有杀死线程
executorservice not killing thread
代码:
//List all threads:
Set<Thread> runningThreads = Thread.getAllStackTraces().keySet();
System.out.println(runningThreads.toString());
//Thread creation:
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(this);
//Thread termination:
executorService.shutdownNow();
//List all threads:
Set<Thread> runningThreads = Thread.getAllStackTraces().keySet();
System.out.println(runningThreads.toString());
我希望打印出来的列表两次都完全相同,但我得到的是结果中包含的创建线程的打印结果
如何完全销毁线程以使其无处可寻?
shutdownNow()
试图停止 运行 线程,但正如它的 API 文档所说:
This method does not wait for actively executing tasks to terminate. Use awaitTermination
to do that.
所以当调用shutdownNow()
returns之后的代码时线程可能仍然是运行。另请注意,您需要确保线程中的任务 运行 实际终止; shutdownNow()
不会终止线程,它只会尝试中断它。
如文档所述,在调用 shutdownNow()
之后调用 executorService.awaitTermination(...)
以等待线程停止。
代码:
//List all threads:
Set<Thread> runningThreads = Thread.getAllStackTraces().keySet();
System.out.println(runningThreads.toString());
//Thread creation:
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(this);
//Thread termination:
executorService.shutdownNow();
//List all threads:
Set<Thread> runningThreads = Thread.getAllStackTraces().keySet();
System.out.println(runningThreads.toString());
我希望打印出来的列表两次都完全相同,但我得到的是结果中包含的创建线程的打印结果
如何完全销毁线程以使其无处可寻?
shutdownNow()
试图停止 运行 线程,但正如它的 API 文档所说:
This method does not wait for actively executing tasks to terminate. Use
awaitTermination
to do that.
所以当调用shutdownNow()
returns之后的代码时线程可能仍然是运行。另请注意,您需要确保线程中的任务 运行 实际终止; shutdownNow()
不会终止线程,它只会尝试中断它。
如文档所述,在调用 shutdownNow()
之后调用 executorService.awaitTermination(...)
以等待线程停止。