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

时间:2010-01-06 09:45:30

标签: java multithreading

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

我有一个连接的线程,使用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()这样的方法来处理发送时的超时。 recv数据。

所以,我不知道如何在发送和放弃时正确地停止mythread。 recv方法运行了很长时间。

任何人都可以建议我一些解决方案。

感谢

3 个答案:

答案 0 :(得分:1)

MyThread myt = new MyThread();
myt.start();
... later on ...
myt.interrupt();

请注意,interrupt()并非完全万无一失(阅读文档),但在您的情况下它将有所帮助。您可能还需要修改自己的代码(在MyThread内)以使用interruptedisInterrupted

检查中断状态

答案 1 :(得分:1)

我没有发现你阻止/等待的发送/接收是否是一个“正常”的TCP / IP套接字;但如果是这样,只需关闭套接字就可以很容易地从外部中止I / O操作。这并不广为人知,但AFAIK完全合法,它就像一个魅力。

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

答案 2 :(得分:0)

您将需要使用易失性标志和一个倒计时循环,直到超时耗尽或连接发生为止。