2012-03-22 10 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的實例,它必須工作。