【发布时间】:2013-11-15 12:55:11
【问题描述】:
如果我只是替换会出现什么问题
socket = new Socket()
与
socket = SocketChannel.open().socket()?
背景:我有一些使用new Socket() 的遗留代码,我希望能够中断socket.connect() 调用。我不想重写代码来使用 NIO。我了解到Thread.interrupt() 不会中断socket.connect(),但另一个线程上的socket.close() 应该会中断连接。奇怪的是,这适用于 Java 7,但不适用于 Java 6。
我不知何故想到使用socket = SocketChannel().open().socket() 会神奇地让我使用Thread.interrupt() 来打断socket.connect()。它没有,但奇怪的是,它确实使 socket.close() 在 Java 6 中中断 socket.connect()!
请注意,我并没有以任何方式直接使用附加的 SocketChannel --- 它在我创建 Socket 时出现,以后再也不会出现。
这有什么问题?
【问题讨论】:
标签: java sockets nio socketchannel