0
我有方法「啓動」的主線程。這種方法啓動另一個線程,那樣做很長時間。方法「開始」可以從另一個線程調用。如何避免在「start」方法中創建新線程(如果已經有一個線程正在運行並且不鎖定主線程)?我嘗試使用singleThreadExecutor,但它排隊任務。java:不要在當前活動時啓動另一個線程
代碼: 啓動方式:
public void start(){
// need only one active thread
// if thread alive, avoid to start another
t = new Thread(new Runnable() {
public void run() {
try {
Thread.currentThread().sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
}
簡單測試
for (int i = 0; i < 100; i++) {
Thread r = new Thread(new Runnable() {
public void run() {
Helper.getInstance().start();
}
});
r.start();
}
使用大小爲1的線程池 –
那麼,如果線程已經運行,或者只是忽略它,你想排隊第二個工作嗎? – Thilo
SingleThreadExecutor不會對線程進行排隊。它排隊任務(但在你的情況下,你可能會錯誤地將你的任務變成線程)。 – Kayaman