中断DatagramSocket.receive中的一个线程

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)