我有一个应用程序从其他应用程序接收警报,通常一分钟左右,但我需要能够处理每分钟更高的音量。我使用的接口和Alert框架通常要求警报可以异步处理,并且可以在异步处理警报时停止。停止方法具体记录为停止线程。我编写了下面的代码来创建AlertRunner线程,然后停止线程。但是,这是处理终止线程的正确方法吗?此代码是否能够轻松扩展(不是可笑的音量,但可能同时发出第二个或多个提醒警报)?这是一种安全的方式来生成新线程并终止它们?
private AlertRunner alertRunner;
@Override
public void receive(Alert a) {
assert a != null;
alertRunner = new alertRunner(a.getName());
a.start();
}
@Override
public void stop(boolean synchronous) {
if(!synchronous) {
if(alertRunner != null) {
Thread.currentThread().interrupt();
}
}
}
class AlertRunner extends Thread {
private final String alertName;
public AlertRunner(String alertName) {
this.alertName = alertName;
}
@Override
public void run() {
try {
TimeUnit.SECONDS.sleep(5);
log.info("New alert received: " + alertName);
} catch (InterruptedException e) {
log.error("Thread interrupted: " + e.getMessage());
}
}
}
我想知道是否Thread.currentThread()。interrupt();'做了你认为它的作用。它所做的是,它会在调用你的stop()方法的线程中设置_interrupted标志_。我怀疑的原因是,很少有任何理由让线程自行中断。 –