java - 从一个线程中退出

标签 java multithreading udp

我有以下代码块:

public void startListening() throws Exception {
    serverSocket = new DatagramSocket(port);
    new Thread() {

        @Override
        public void run() {
            System.out.print("Started Listening");
            byte[] receiveData = new byte[1024];
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            while (!stopFlag) {
                try {
                    serverSocket.receive(receivePacket);
                    String message = new String(receivePacket.getData());
                    System.out.println("RECEIVED: " + message);
                } catch (Exception ex) {
                    System.out.print("Execption :" + ex.getMessage());
                }
            }
        }
    }.start();
}


public void stopListening() {
    this.stopFlag = true;
}

假设我将 stopFlag 设置为 true。 serverSocket.receive(receivePacket); 将等待直到它收到数据包。想让线程在stopFlag设置为true后立即退出怎么办?

最佳答案

我在套接字上也遇到了同样的问题,interrupt() 不起作用。我的问题通过关闭套接字得到解决。因此,在 setStop() 方法(如上所建议的)中,您必须调用 serverSocket.close()(您显然必须使 serverSocket 成为类成员或类似的东西)。

关于java - 从一个线程中退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10136603/

相关文章:

java - 使用相同依赖项的多个版本构建

java - 模拟 Apache Commons CSV CSVRecord

java - Firestore 需要双嵌套表

java - 在 EJB 中使用 @Timeout 代替 Thread.sleep()

ios - 在 Xcode 9/Swift 4 Google APIs Client Library for Objective-C for REST : threading notification not working

java - 列出并发失败

java - 无法通过 Internet 从 PC 服务器接收 Android 上的 UDP 数据

javascript - 使用 UDP 的 Node.js 文件传输

java - Nashorn访问非静态Java方法

c++ - 将套接字句柄传递给线程时,recvfrom() 返回错误 10022