Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DatagramSocket.receive()和SocketException_Java_Multithreading_Sockets - Fatal编程技术网

Java DatagramSocket.receive()和SocketException

Java DatagramSocket.receive()和SocketException,java,multithreading,sockets,Java,Multithreading,Sockets,我有一个线程,其工作是坐在DatagramSocket上,侦听传入的数据包,并将它们放入队列中进行进一步处理。其运行方式为: public void run() { while(!disconnected) { byte[] buffer1 = new byte[FrameSizeBytes]; DatagramPacket RxPacket = new DatagramPacket(buffer1,buffer1.

我有一个线程,其工作是坐在DatagramSocket上,侦听传入的数据包,并将它们放入队列中进行进一步处理。其运行方式为:

        public void run() {
        while(!disconnected) {
            byte[] buffer1 = new byte[FrameSizeBytes];
            DatagramPacket RxPacket = new DatagramPacket(buffer1,buffer1.length);
            try {
                RxSocket.receive(RxPacket);
            } catch (IOException e) {
                // handle exception
            }
            buffer1 = RxPacket.getData();
            Q.add(buffer1);
        }
    }
我有另一个线程,它的工作是决定何时终止这个线程。 它通过将
disconnected
变量设置为true并关闭套接字来实现此目的。 当时的想法是,关闭套接字会将线程解锁为异常;例外情况可以处理;一旦异常被处理,循环条件将导致循环退出。(或者,
异常处理本身可以将disconnected设置为true。)

问题:在这种情况下引发的异常是一个
SocketException:socketclosed
,这非常合理。但是DatagramSocket.receive()不会抛出SocketException,因此我无法处理或抛出它


问题:有没有办法让这个想法发挥作用,或者我需要找到另一种方法?(注意:我不只是想在套接字上设置超时。这对这个应用程序来说不是一个好方法。)

设置标志,给自己发送一个虚拟数据包,然后关闭套接字。在receive()之后,在处理数据包之前检查标志,

这种方法没有任何意义,应该绝对放弃。在一个线程中释放资源,而另一个线程正在或可能正在使用资源,这是一个危险的错误。(您确定需要终止线程吗?它是否有任何危害?)