Java DatagramSocket.receive()和SocketException
我有一个线程,其工作是坐在DatagramSocket上,侦听传入的数据包,并将它们放入队列中进行进一步处理。其运行方式为: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.
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()之后,在处理数据包之前检查标志,这种方法没有任何意义,应该绝对放弃。在一个线程中释放资源,而另一个线程正在或可能正在使用资源,这是一个危险的错误。(您确定需要终止线程吗?它是否有任何危害?)