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

标签 java multithreading

我有一个多线程服务器应用程序。其中一个 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/

相关文章:

java - 管理加载 ZipFile 时分配的内存

java - 多线程程序中的意外输出

java - Spring 社交 Facebook 登录

java - GenericDao<Order,capture#2-of ?> 类型中的方法 read(capture#2-of ?) 不适用于参数 (Long)

java - Install4j - 将 "Next"按钮的文本更改为 "Install"

C# .NET 2 Threading.Timer - 时间漂移

java - android中使用java的乘法表

java - 访问 Spring bean 类时发生并发修改异常

linux - 将内存区域限制为线程

python 2 定时器不遵循顺序