我有一个处理程序对象如下,只是一个例子 我的问题是:如果有人调用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;
}
}
}
答案 0 :(得分:0)
问题的答案是肯定的!在这种情况下可能会发生这种情况。 “dataSync”此处理程序将对消息进行排队并执行“in order call”,但另一个线程将立即调用“getDateEnabled()”。
因此,当“dataSync”处理程序对大量消息进行排队时,它将出错。