我用synchronized方法编写了一些数据库查询。理想情况下,如果某些代码在此代码块中执行,那么其他线程不应该访问它,但有时在我的情况下。
synchronized private void func1 () {
// printing some log for start
// some database code
// printing log at the end
}
因此我在开始时打印的日志打印两次。如何阻止这件事?
答案 0 :(得分:0)
synchronized块使用对调用func1()的对象的锁定。如果使用不同的对象从不同的线程调用func1,则可能遇到的情况。
假设你有
class A {
synchronized private void func1() {}
void func2() { func1()}
}
从2个不同的线程调用new A()。func2(),func1()在这种情况下不是线程安全的。
如果我的示例中只有一个A类实例,那么它必须工作。