鍍金池/ 問答/Java/ JAVA如何終止一個運(yùn)行時間很長的后臺線程?

JAVA如何終止一個運(yùn)行時間很長的后臺線程?

我知道thread的stop方法已經(jīng)不建議用了,一般都推薦用interrupt,但是這樣寫不起來不是很麻煩嗎? 比如我的線程里包括有N個步驟,類似:
public void run() {

step1();
step2();
step3();
......
stepN();

}

為了能夠及時的響應(yīng)終止,難道要到處加上isInterrupted的判斷?
public void run() {

step1();
if (isInterrupted()) return;
step2();
if (isInterrupted()) return;
step3();
if (isInterrupted()) return;
......
stepN();

}

這種判斷加的到處都是,感覺很不優(yōu)雅,沒有更好的做法嗎?

回答
編輯回答
孤影

只能這樣,java thread的interrupt是交互式的,不存在硬性關(guān)閉的機(jī)制

2018年3月3日 12:10
編輯回答
失心人

可以借助于Google guava來實(shí)現(xiàn)優(yōu)雅的任務(wù)超時退出機(jī)制。

ExecutorService executorService = Executors.newFixedThreadPool(1);
        SimpleTimeLimiter stl = new SimpleTimeLimiter(executorService);
        String result = null;
        try {
            result = stl.callWithTimeout(() -> {
                Thread.sleep(3000);
                return "result";
            }, 4, TimeUnit.SECONDS, true);
            System.out.println("正常調(diào)用:" + result);
        } catch (Exception e) {
            System.out.println("超時調(diào)用:" + result);
            e.printStackTrace();
        }finally {
            executorService.shutdown();
        }
2018年1月25日 16:07