处理程序对象中的线程顺序问题

时间:2015-04-27 05:27:48

标签: android multithreading handler

我有一个处理程序对象如下,只是一个例子 我的问题是:如果有人调用dataSync.setDataEnabled(true),则立即调用dataSync.getDateEnabled()。我们可以确保在dataSync类中按顺序执行set / get仍然执行吗?因为我们使用消息来写数据但直接读取数据。

由于

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 个答案:

答案 0 :(得分:0)

问题的答案是肯定的!在这种情况下可能会发生这种情况。 “dataSync”此处理程序将对消息进行排队并执行“in order call”,但另一个线程将立即调用“getDateEnabled()”。

因此,当“dataSync”处理程序对大量消息进行排队时,它将出错。