gpt4 book ai didi

java - ThreadExecutor 强制无限循环中执行线程

转载 作者:行者123 更新时间:2023-12-01 17:15:38 25 4
gpt4 key购买 nike

我有一个多线程服务器应用程序。其中一个 Runnables 使用无限循环来不断检查连接。这是使用 socket = serverSocket.accept() 完成的,这是一个阻塞调用。

当我关闭服务器时,我想停止所有线程的执行。我尝试了 threadExecutor.shutdown()threadExecutor.shutdownNow()

这些函数似乎都没有杀死我上面提到的线程。

你们能帮我一下吗?提前致谢!

最佳答案

When I shutdown my server I want to to stop all of my threads from executing.

当一个线程在 serverSocket.accept() 中被阻塞时,停止它的唯一方法是关闭它下面的 serverSocket。然后,accept 调用将抛出一个可以捕获的 IOException,然后线程应该退出。

如果您还需要停止客户端处理程序线程,那么您将需要让它们监听线程中断。中断线程不会阻止其运行,但会在线程上设置中断标志,并导致任何抛出 InterruptedException 的方法抛出。要中断 ExecutorService 中的线程,您可以调用 threadExecutor.shutdownNow()。但是,这不会中断 accept() 调用。

通常在线程句柄循环中,我们会执行以下操作:

while (!Thread.currentThread().isInterrupted()) {
...
}

关于java - ThreadExecutor 强制无限循环中执行线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22311539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com