如何杀死在Java中等待阻塞函数调用的线程?

2022-09-04 03:56:17

我有一个线程:

Thread t = new Thread(){
    public void run(){
        ServerSocketConnection scn = (ServerSocketConnection)
                Connector.open("socket://:1234");
        // Wait for a connection.
        SocketConnection sc = (SocketConnection) scn.acceptAndOpen();
       //do other operation
    }
};
t.start();

假设没有客户端连接到服务器,因此此线程将被阻止。现在我想杀死上面的线程t?我该如何杀死它?


答案 1

Thread.interrupt()不会中断套接字上阻塞的线程。您可以尝试调用 或 ,但这些方法已被弃用(编辑:实际上,在 J2ME 中没有),并且在某些情况下不起作用,原因您可以在此处阅读。正如那篇文章所提到的,在你的情况下,最好的解决方案是关闭你正在阻止的套接字:Thread.stop()Thread.destroy()

在某些情况下,您可以使用特定于应用程序的技巧。例如,如果线程正在等待已知套接字,则可以关闭该套接字以使线程立即返回。不幸的是,实际上没有任何技术可以正常工作。应该注意的是,在等待线程不响应 Thread.interrupt 的所有情况下,它也不会响应 Thread.stop。此类情况包括故意的拒绝服务攻击,以及 thread.stop 和 thread.interrupt 无法正常工作的 I/O 操作。


答案 2

您可以致电 .这将在你的线程中抛出一个thread.interrupt()InterruptedException