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(...) 以等待线程停止。