我想使用线程 ID 终止线程。
使用下面的语句可以获取线程,我将这个线程 ID 存储在 Hashtable
中。
long threadId = Thread.currentThread().getId();
我该如何实现它?
我想使用线程 ID 终止线程。
使用下面的语句可以获取线程,我将这个线程 ID 存储在 Hashtable
中。
long threadId = Thread.currentThread().getId();
我该如何实现它?
//Give you set of Threads
Set<Thread> setOfThread = Thread.getAllStackTraces().keySet();
//Iterate over set to find yours
for(Thread thread : setOfThread){
if(thread.getId()==yourThread.getId()){
thread.interrupt();
}
}
setOfThread.stream().findAny(t -> t.getId() == id).ifPresent(Thread::interrupt);
该行代码会在一个线程集合 setOfThread
中查找一个线程 t
,如果该线程的 ID 等于变量 id
,则会调用其 interrupt()
方法进行中断。 - Marko Topolnikpublic class Stoppable implements Runnable
{ private boolean stopRequested = false;
} 私有布尔型变量stopRequested=false;@Override
public void run()
{
// Thread code
if (stopRequested)
{
// Perform any tidy up activities and return from the run method
return;
}
}
public void stop()
{
stopRequested = true;
}
}
你可以使用Java内置中断方法thread.interrupt()来实现。然后在你的runnable中检查它,使用Thread.currentThread().isInterrupted()。但是我一直更喜欢使用单独的变量和代码,这样可以给我更多的控制。
Thread.interrupt()
终止线程,或为每个线程ID维护一个Map<String,Thread>
。 - Braj