2014-02-16 107 views
-1

在Java中啓動,暫停,恢復和停止線程的最佳方式是什麼? 我寫了一段代碼來測試,它的工作原理是我想要的,但我不確定這是否是最好的方法。 如果有很多線程正在進行這樣的工作,是不是會浪費大量的資源,而他們正在檢查運行並且一直停下來?管理線程的最佳方法?

public class ThreadTest { 
    public static void main(String[] args) { 
     try { 
     Counter t = new Counter(); 
     t.start(); 
     Thread.sleep(4000); 
     t.pause(); 
     Thread.sleep(5000); 
     t.pause(); 
     Thread.sleep(4000); 
     t.finish(); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 
} 

class Counter extends Thread { 

    int c; 
    boolean run, pause; 

    public Counter() { 
     c = 0; 
    } 

    public void run() { 
     run = true; 
     while (run == true) { 
     if (!pause) { 
      c++; 
      System.out.println(c); 
      try { 
       Thread.sleep(1000); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     } 
     System.out.println("Stop!"); 
    } 

    public void finish() { 
     run = false; 
    } 

    public void pause() { 
     pause = !pause; 
    } 

} 
+1

你應該縮進代碼,更容易閱讀 – Coffee

+1

請編輯你的問題。所有左對齊的代碼都很難閱讀。 –

+1

好的,我已經編輯了你的代碼,但是在將來,爲了使你的問題和代碼容易理解而付出的努力應該落在你身上。請記住這一點。 –

回答

1

什麼是開始,暫停,恢復,並停止在Java線程的最佳方式?如果有許多線程正在進行這樣的工作,那麼當它們檢查運行並且一直停頓時,是不是會浪費大量資源?

最好的方法是不顯式啓動和暫停線程。你是對的,這是浪費時間。

當線程阻塞自己的流,end of a producer/consumer queue或其他便於併發的數據結構時,線程暫停應該由操作系統自動完成。

相關問題