java:如何停止等待很长时间的线程
我有一个程序通过xot(x25 over tcp/ip)协议连接到服务器。java:如何停止等待很长时间的线程
我有一个线程连接,发送recv数据与服务器使用xot库。
public class MyThread extends Thread{
public MyThread() {
}
@Override
public void run(){
// init sock
...
// connect to server
sock.connect("server_address", timeout);
System.out.println("send data ..");
sock.send(data);
System.out.println("send data ok, recv data ..");
Data data = sock.recv();
System.out.println("recv data ok");
}
}
我的lib我使用可以处理连接超时,但没有像setSoTimeout()方法没有发送& recv的数据时,处理超时。
因此,当发送& recv方法运行很长时间时,我不知道如何阻止mythread正确的方向。
任何人都可以建议我一些解决方案。
感谢
泉
MyThread myt = new MyThread();
myt.start();
... later on ...
myt.interrupt();
注意interrupt()
没有完全防呆(阅读文档),不过赔率是好的,它会在你的情况有所帮助。您可能还需要修改自己的代码(内MyThread
)使用interrupted
或isInterrupted
我没赶上发送/接收是否你拦截检查中断状态/等待是一个“正常的” TCP/IP插座;但如果是这样的话,只需关闭套接字就可以轻松地从外部中止I/O操作。这不是广为人知,但是AFAIK是完全合法的,它的功能就像一个魅力。
I/O操作当然会产生一个IOException
,但这很容易捕捉,然后您可以退出线程的run()
方法。
我会尽力,谢谢 – QuanNH 2010-01-06 10:15:07
您将需要使用一个易失性标志和一个while循环,直到超时或耗尽连接才会倒计时。
如何添加一个while循环,同时我的线程暂停在recv方法从服务器等待数据? – QuanNH 2010-01-06 10:39:13
请注意,由于线程无法自行中断,因此您需要第二个线程(或定时器)来触发中断。 – Thilo 2010-01-06 09:53:50
好的,谢谢所有:) – QuanNH 2010-01-06 10:14:26
哦,如何添加代码,以检查中断状态,当recath方法等待resp从服务器(没有打印“recv数据ok”)mythread挂起 – QuanNH 2010-01-06 10:37:39