gpt4 book ai didi

Java:停止线程 TCP 服务器的好方法?

转载 作者:搜寻专家 更新时间:2023-10-31 19:49:41 24 4
gpt4 key购买 nike

我有以下用于 TCP 客户端-服务器通信的结构:

  • 在服务器启动时服务器启动接受者线程,接受客户端连接并传递 ServerSocket给它。
  • 当客户端连接到达时,接受者线程调用 accept()ServerSocket 和提交客户端处理作业到工作线程(通过执行程序/线程池)并为其提供客户端套接字。
  • 循环中的 Worker 从中读取数据客户端套接字流,对其进行处理并发送回复。

问题是如何优雅地停止整个系统?我可以通过关闭 ServerSocket 来停止接受器线程。它会导致 accept() 阻塞调用抛出 SocketException。但是如何阻止 worker 呢?他们从流中读取并且此调用正在阻塞。根据this streams 不会抛出 InterruptedException,因此 worker 不能被中断()。

看起来我需要从另一个线程关闭工作套接字,对吧?为此,应该将 socket 设置为公共(public)字段,或者在 worker 中提供一种方法来关闭它。这会很好吗?还是我的整个设计有缺陷?

最佳答案

您的模型工作正常。中断不可中断构造(如 IO)的最佳方法是关闭套接字。您当然可以在进入阻塞状态之前处理它,但是如果 IO 函数不对中断使用react,您实际上没有太多好的选择

关于Java:停止线程 TCP 服务器的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5623631/

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