java:如何停止等待很长时间的线程

java:如何停止等待很长时间的线程,java,multithreading,Java,Multithreading,我有一个程序通过xot(tcp/ip上的x25)协议连接到服务器 我有一个线程连接,使用xot库向服务器发送recv数据 public class MyThread extends Thread{ public MyThread() { } @Override public void run(){ // init sock ... // connect to server sock.connec

我有一个程序通过xot(tcp/ip上的x25)协议连接到服务器

我有一个线程连接,使用xot库向服务器发送recv数据

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()这样的方法来处理超时

所以,当send&recv方法长时间运行时,我不知道如何正确地停止mythread

任何人都可以给我建议一些解决办法

谢谢


请注意,
interrupt()
并非完全是傻瓜式的(请阅读文档),但它很可能对您的情况有所帮助。您可能还需要修改自己的代码(在
MyThread
中),以使用
interrupted
isInterrupted
检查中断状态,我没有发现您正在阻止/等待的发送/接收是否为“正常”TCP/IP套接字;但如果是这样,只需关闭套接字,就可以很容易地从外部中止I/O操作。这并不广为人知,但完全合法,而且很有魅力


当然,I/O操作会产生一个
IOException
,但这很容易捕获,然后您可以退出线程的
run()
方法。

您需要使用一个volatile标志和一个while循环,该循环将倒计时,直到超时耗尽或连接发生。

请注意,您需要第二个线程(或计时器)当线程无法自行中断时触发中断。哦,当mythread suspend at recv方法等待服务器响应时,如何添加代码来检查中断状态(不打印“recv data ok”),我认为interrupt()不适用于他的自定义套接字库,除非它是由nio实现的。若并没有,recv已经阻塞,并且并没有办法定期检查中断状态。如何在我的线程挂起recv方法时添加while循环来等待来自服务器的数据?
MyThread myt = new MyThread();
myt.start();
... later on ...
myt.interrupt();