2016-03-15 124 views
0

我有周期性的線程運行每一秒鐘並引用應用程序。問題是線程運行時CPU使用率上升,程序響應非常糟糕,看起來CPU風扇正在全功率運行。也許在這裏使用無限的時候會有問題。有沒有其他辦法可以做到這一點?線程並行於其他進程java

Runnable r1 = new Runnable() { 
      public void run() { 
       try { 
       while (connect.isDisable()){ 
        refresher(rx); 
        Thread.sleep(1000L); 
       } 
       } catch (InterruptedException iex) {} 
      } 
      }; 
     Thread thr1 = new Thread(r1); 
     thr1.start(); 

如果有一個替代的方式,功能thhis套運行平行於其他處理和事件處理程序的每一個響應secounds就像正常?

+1

使用Timer或ScheduledExecutorService而不是讓線程進入睡眠狀態可能會更好。 「複習」是做什麼的?處理器密集? – bradimus

+0

如果您使用的是Eclipse或類似的IDE,當您開始一個新的默認時,它不會結束一個進程,因此您可以同時運行大量相同代碼的實例並驅動您的風扇螺母。 –

+0

@bradimus它從串口讀取一行並解析它,並用新數據更新應用程序中的圖表 –

回答

1

首先,thread是程序中執行語句或代碼的序列,並不是硬件。這是發生的執行流程。

執行線程是可由調度程序獨立管理的最小程序指令序列,該調度程序通常是操作系統的一部分。

是的,如果您的CPU有多個核心,多個threads可以同時運行。這當然會增加CPU使用率,因爲多個進程或代碼序列同時運行。您要求CPU同時執行2個或更多的事情,因此,過度使用是一個明顯的後果。

關於風扇,當CPU使用率較高時,可以設計爲運行得更快,以便有效驅除產生的多餘熱量。

+0

感謝您的信息。但是複習只是一小段代碼,並不是很重的代碼。所以當這段代碼讓我的cpu瘋狂時,線程的好處是什麼。我使用的是macbook pro視網膜,所以我的CPU不是低速的。 你能不能建議一段新的代碼,在用戶無法理解的方式下,在應用程序的後臺執行相同的操作,但效率更高? –