2013-02-28 79 views
1

大家好,這樣的代碼可能會導致程序滯後嗎?Java代碼速度提升

while(true) 
if(!connected) break; 

正如我們所見,它一直在檢查狀況。如果我在每次迭代中設置小睡,會更快嗎?

該代碼在上運行Android GingerBread

編輯:

它等待其他線程完成,並連接設置爲false變量。變量連接像鎖一樣使用。線程通常會發現它是真實的並且等待是錯誤的。然後設置爲true並且只在最後改變它。

+1

什麼是你的一個連接檢查? Android中的很多連接都有與之關聯的廣播,這將消除完全需要這樣一個循環 – 2013-02-28 12:47:50

+9

如果您沒有連接,這是將手機轉換爲便攜式加熱器的好方法。 – 2013-02-28 12:48:57

+1

@AlexanderPogrebnyak我認爲你錯了。你能解釋你的評論嗎?如果'connected'是'false',他會立即從'while'循環中斷開。 – jlordo 2013-02-28 12:56:52

回答

1

,我認爲這將是更好地添加少量睡在你的循環,以免費的處理器資源用於其他進程,特別是在一個核處理器。

+0

請不要在Android上這樣做,你不僅會破壞你的應用程序的用戶體驗,而且如果你的應用程序正在運行,它也會導致整體操作系統經驗不足。以正確的方式做,或找到一個正確的方式。 – 2013-02-28 13:40:01

1

我相信這可能是這樣的:

while(connected) { 
// do stuff... 
+1

如果第一次調用代碼時連接爲false,則它將永遠不會運行。我非常懷疑OP希望 – 2013-02-28 12:49:25

+0

@RaghavSood由OP發佈的代碼在'connected'爲'false'時也不會首次運行。 – jlordo 2013-02-28 12:52:42

+0

@RaghavSood你是否看到OPs'if'條件的否定。如果'connected'是'false',他的'if'條件是'true',他將'break'離開循環... – jlordo 2013-02-28 12:55:24

1

嘗試這樣:

private Integer connected; 
private ConnectedListener connectedListener; 

public interface ConnectedListener { 
    public void onDisconnected(); 
} 

private void startThreads() { 
    for (int i = 0; i < 10; i++) { 
     new Thread(new Runnable() { 

      @Override 
      public void run() { 
       synchronized (connected) { 
        connected++; 
       } 

       // do some random long work 

       synchronized (connected) { 
        connected--; 
        if (connected == 0 && connectedListener != null) { 
         //let the listener know that we are completely disconnected 
         connectedListener.onDisconnected(); 
        } 
       } 
      } 
     }).start(); 
    } 
} 
+0

這種方法比較複雜,雖然在某些應用中可能很有用。 – Balvonas 2013-02-28 13:30:40