2012-03-22 104 views
0

我在同步方法中写了一些数据库查询。理想情况下,如果一些代码在这个代码块内执行,那么其他线程不应该访问这个,但它有时会在我的情况。同步块android

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

      // some database code 

      // printing log at the end 
    } 

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

+0

是否有一个特定的原因,你为什么要在一个同步块查询? – dymmeh 2012-03-22 16:48:13

+0

你在调用它的类的多个实例上调用func1吗? – jqpubliq 2012-03-22 16:50:12

+0

这不是一个同步块,它是一个同步方法 同步块的形式为 同步(lockobject){ //某些代码 } :::不是说它对你的问题有什么影响,只是想把d指出它。 – ilomambo 2012-05-20 05:35:50

回答

0

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

假设你有

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

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

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