我正在编写一个 Java 应用程序,它将实例化一个类的对象,以表示已连接并注册到我的应用程序另一端的外部系统的客户端。
每个客户端对象中都有两个嵌套类,分别代表前端和后端。前端类将不断地从实际客户端接收数据,并将指示和数据发送到后端类,后端类将从前端获取数据并使用适当的格式和协议将其发送到外部系统该系统需要。
在设计中,我们希望将客户端对象的每个实例化为一个线程。然后,在每个线程内自然会有两个套接字 [EDIT],每个套接字都有自己的 NIO 通道[/EDIT],一个客户端,一个系统端分别位于前端和后端。但是,这现在引入了对非阻塞套接字的需求。我一直在阅读这里的教程,该教程解释了如何在主线程中安全地使用 Selector 来处理所有具有连接的线程。
但是,我需要的是多个选择器——每个选择器都在自己的线程中运行。通过阅读上述教程,我了解到 Selector 中的键集不是线程安全的。这是否意味着如果我尝试为每个选择器提供自己的一对套接字和通道,在他们自己的对应线程中实例化的单独选择器可能会产生冲突的键?将选择器向上移动到主线程的可能性很小,但根据我给出的软件要求,这远非理想。感谢您的帮助。