SEK*_*SEK 21 java sockets multithreading
我正在构建一个侦听TCP和UDP的应用程序,而且我的关机机制遇到了一些问题.当我调用Thread.interrupt()
每个侦听线程时,TCP线程被中断而不是监听,而UDP侦听器则没有.具体来说,TCP线程使用ServerSocket.accept()
,它只返回(没有实际连接).UDP线程使用DatagramSocket.receive()
,但不退出该方法.
这是我的JRE,我的操作系统中的问题,还是应该切换到(Datagram)Socket.close()
?
更新:我发现了对问题的分析.它确认行为不一致.
Joh*_*int 32
中断网络IO的常用习惯是关闭通道.如果您需要在等待发送或接收时有效地中断它,那将是一个不错的选择.
public class InterruptableUDPThread extends Thread{
private final DatagramSocket socket;
public InterruptableUDPThread(DatagramSocket socket){
this.socket = socket;
}
@Override
public void interrupt(){
super.interrupt();
this.socket.close();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10766 次 |
最近记录: |