线程存储在@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R = block(this)
中,以便以后可以通过名称动态设置它们。互联网上有很多例子,关于这一点,但是我不行,所以选定的线程不会停止。
我的错是什么?
ArrayList
答案 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的功能完备的代码,如果之后立即列出所有线程,被中断的代码仍可能显示为活动状态。