2015-04-27 55 views
0

我有一個處理程序對象,如下所示,只是一個示例 我的問題是:如果有人調用dataSync.setDataEnabled(true),則立即調用dataSync.getDateEnabled()。我們可以確保set/get依然在dataSync類中執行嗎?因爲我們使用消息來寫入數據,但直接讀取數據。處理程序對象中的線程順序問題

感謝

class dataSync extends Handler { 
    ... 

    @Override 
    public void handleMessage(Message msg) { 
     case CMD_SET_DATA_ENABLE_SYN: 
     final boolean enabled = ((boolean)msg.arg1) ? true : false; 
     setDataEnabledSync(enabled); 
     break; 
    } 

    public boolean getDateEnabled() { 
     sync (mLock) { 
      return mDataEnabled; 
     } 
    } 

    void setDataEnabled(boolean enable) { 
     Message msg = obtainMessage(CMD_SET_DATA_ENABLE_SYNC); 
     msg.arg1 = enable ? 1 : 0; 
     sendMessage(msg); 
    } 

    void setDataEnabledSync(enabled); { 
     sync (mLock) { 
      mDataEnabled = enabled; 
     } 
    } 
} 
+1

看起來標題和內容不匹配。你能改變它嗎? – Kishore

+0

謝謝,這更清楚嗎? – user3584600

+0

和你的意思是什麼「線程順序」?我沒有看到任何其他的威脅,只是主UI 1 – pskink

回答

0

的問題的答案是肯定的!在這種情況下可能會發生。 「dataSync」此處理程序將排隊消息並執行「按順序調用」,但另一個線程將立即調用「getDateEnabled()」。

因此,當「dataSync」處理程序排隊很多消息時,它會出錯。