这个同步代码怎么破坏了?

Akh*_*ese 3 java android synchronized android-asynctask

我有以下代码片段.

synchronized (mObject) {
    if (mObject.variable != -1) {
        doThis();
        doThisAsWell();
        andThis();
        insertObjectInDb(); // This is crashing because mObject.variable is -1
    }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,如果我在一个对象上使用synchronized,然后运行该块,那么任何其他线程都不能更改该变量的值,对吧?我不明白变量的值是-1,当我在进入下一个块之前专门检查它.不,该块中的所有功能都没有改变该值.我完全误解了这些块是如何工作的吗?

如果它很重要,那么这就是Android应用程序中异步任务的doInBackground()方法.

有任何想法吗?

Bla*_*elt 6

据我所知,如果我在一个对象上使用synchronized,然后运行该块,那么任何其他线程都不能更改该变量的值,对吧?

不,你的假设是错的.synchronized是一个监视器.您唯一的保证是一次一个线程访问监视器.