【问题标题】:synchronized block android同步块android
【发布时间】:2012-03-22 16:32:09
【问题描述】:

我已经用同步方法编写了一些数据库查询。理想情况下,如果某些代码在此代码块内执行,则其他线程不应访问它,但在我的情况下有时会访问。

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

             // some database code

            // printing log at the end
   }

所以我在开始时打印的日志打印了两次。这个东西怎么屏蔽?

【问题讨论】:

  • 您将查询放在同步块中是否有特定原因?
  • 您是否在其所在类的多个实例上调用 func1?
  • 这不是一个同步块,它是一个同步方法一个同步块的形式为 synchronized(lockobject) { // some code } ::: 并不是说​​它对你的问题有任何影响,只是想指出来。

标签: android synchronized


【解决方案1】:

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

假设你有

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

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

如果您在我的示例中只有 1 个 A 类实例,则它必须有效。

【讨论】:

    猜你喜欢
    • 2013-07-21
    • 1970-01-01
    • 2014-04-30
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 2011-12-01
    • 1970-01-01
    相关资源
    最近更新 更多