我有一個應用程序從其他應用程序接收警報,通常一分鐘左右,但我需要能夠處理每分鐘更高的音量。我使用的接口和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標誌_。我懷疑的原因是,很少有任何理由讓線程自行中斷。 –