arrayList中的线程不知道中断

时间:2017-11-06 18:46:29

标签: java multithreading

线程存储在@kotlin.internal.InlineOnly public inline fun <T, R> T.let(block: (T) -> R): R = block(this) 中,以便以后可以通过名称动态设置它们。互联网上有很多例子,关于这一点,但是我不行,所以选定的线程不会停止。 我的错是什么?

ArrayList

1 个答案:

答案 0 :(得分:0)

//this why not working???
for(Thread t : myThread){
    if(t.getName().equalsIgnoreCase("EZ")){
        t= Thread.currentThread();
        t.interrupt();
        myThread.remove(t);
    }
}

您遍历列表中的所有线程,并在您到达名称为EZ的线程后立即自行执行。我不确定这是不是你真正打算做的,你的问题听起来更像你想要打断EZ-Thread。在这种情况下,您应该省略行t = Thread.currentThread()

你还没有解释你对“不工作”的确切含义,我认为你的意思是你打断的线程仍在继续运行。这是因为,没有任何线程实际执行的操作正在检查它是否被中断的事实。

您可以通过以下方式更改MyThread实现:

class MyThread extends Thread{

    public MyThread(String name) {
        super(name);
    }

    public void run() {
        try {
            while(true){
                Thread.sleep(10);
            }
        }
        catch(InterrutedException ie) {
            // leads to the end of the thread
        }
    }
}

或者

while(!interrupted()){

}

哦,在中断和输出所有线程之间稍等一下。启动和关闭线程是一项复杂的任务,需要一些时间。因此,即使使用可靠地关闭Thread的功能完备的代码,如果之后立即列出所有线程,被中断的代码仍可能显示为活动状态。