中断连接插座

Mat*_*att 8 java sockets multithreading nonblocking

我有一个GUI,其中包含要连接的服务器列表.如果用户单击它连接到它的服务器.如果用户单击第二个服务器,它将断开第一个服务器并连接到第二个服务器.每个新连接都在一个新线程中运行,以便程序可以执行其他任务.

但是,如果用户在第一个服务器仍然连接时单击第二个服务器,则会有两个同时连接.

我正在使用它连接,而connect()是阻塞的行:

Socket socket = new Socket();
socket.connect(socketAddress, connectTimeout);
Run Code Online (Sandbox Code Playgroud)

我想也许Thread.currentThread().interrupt();会奏效,但事实并非如此.

我是否需要稍微重构我的代码以便继续进行第一次连接,但是之后会立即关闭它?或者实际上是一种中断connect方法的方法.

San*_*rma 4

如果您使用阻塞套接字实现,中断线程不会“取消”或中断您的套接字连接。打破“阻塞调用”的唯一方法是“关闭”套接字。您可以在可运行任务(例如cancel)上公开一个方法,当用户尝试连接到第二个服务器时,该方法会关闭套接字并清理资源。

如果你愿意,你可以看看我一次性尝试中断进行阻塞调用的线程。