我有一个每15秒运行一次的脚本,它每次都会创建一个新线程。有时这个线程会卡住,阻塞我的程序的同步进程。现在,如果线程被阻塞了20个循环,我想用一个特定的名称杀死这个进程。下面是我的代码:
public void actionPerformed(ActionEvent e) {
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("dd-MM-yyyy HH:mm:ss");
System.out.println(ft.format(dNow));
ThreadGroup currentGroup = Thread.currentThread().getThreadGroup();
int noThreads = currentGroup.activeCount();
Thread[] lstThreads = new Thread[noThreads];
currentGroup.enumerate(lstThreads);
boolean loopthreadfound = false;
for (int i = 0; i < noThreads; i++){
try{
if (lstThreads[i].getName() == "loopthread"){loopthreadfound = true;}
}catch(Exception e1){System.out.println(e1);}
}
if (loopthreadfound == false){
loopthreadcounter = 0;
//Starten in nieuwe thread
Thread loopthread = new Thread() {
public void run() {
try {
checkonoffline();
checkDBupdates();
} catch (JSONException | SQLException | IOException e1) {
System.out.println(e1);
}
}
};
loopthread.setName("loopthread");
loopthread.start();
}else{
loopthreadcounter++;
System.out.println("Loopthread already running... counter: " + loopthreadcounter);
if (loopthreadcounter > 20){
// HERE I WANT TO KILL THE THREAD "loopthread "
}
}
}发布于 2019-12-13 02:05:30
通常,线程名称不是唯一的。如果您正在将一个String与一个Thread相关联,并且该字符串标识了您要停止的线程,请自己跟踪它,而不是将其视为线程名称。
也就是说,创建一个Map<String, Thread>。稍后,您可以通过"name“从map中获取正确的线程并终止它。
请注意,stop()已弃用。您应该找到正确的方法来终止、中断或终止被阻塞的操作。
https://stackoverflow.com/questions/59309998
复制相似问题