2016-02-19 84 views
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();  
    }  
+0

使用大小爲1的線程池 –

+0

那麼,如果線程已經運行,或者只是忽略它,你想排隊第二個工作嗎? – Thilo

+1

SingleThreadExecutor不會對線程進行排隊。它排隊任務(但在你的情況下,你可能會錯誤地將你的任務變成線程)。 – Kayaman

回答

0

如果你只想放棄新的任務時,當前線程正忙,你可以使用一個SingleThreadExecutor並將其配置爲discard any overflow tasks而不是排隊他們。

相關問題