synchronized块android

时间:2012-03-22 16:32:09

标签: android synchronized

我用synchronized方法编写了一些数据库查询。理想情况下,如果某些代码在此代码块中执行,那么其他线程不应该访问它,但有时在我的情况下。

   synchronized private void func1 () {
             // printing some log for start 

             // some database code

            // printing log at the end
   }

因此我在开始时打印的日志打印两次。如何阻止这件事?

1 个答案:

答案 0 :(得分:0)

synchronized块使用对调用func1()的对象的锁定。如果使用不同的对象从不同的线程调用func1,则可能遇到的情况。

假设你有

class A {
   synchronized private void func1() {}
   void func2() { func1()}
}

从2个不同的线程调用new A()。func2(),func1()在这种情况下不是线程安全的。

如果我的示例中只有一个A类实例,那么它必须工作。