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

标签 java multithreading

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

我有一个线程要连接,使用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。

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

谢谢

最佳答案

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

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

检查中断状态

关于java:如何停止等待很长时间的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2012034/

相关文章:

java - 我应该如何在android应用程序中存储用户拍摄的照片?

java - Spring Boot 在 Controller 内执行并行方法

java - 在 Java 中限制线程的 CPU/内存使用?

java - 如何断言该方法不是同时运行(或者在并发时快速失败)?

java - 运行简单线程程序时的不同输出

java - 如何管理tomcat中的所有应用程序

java - 在JAVA中如何检查两个ArrayList中的多个数字

java - ServerSocket Java的最佳方法

java - System.getProperty ("java.class.path") 和 getClassLoader.getURLs() 有什么区别?

java - 不同的缓冲区策略大小如何影响性能?