2012-03-22 18 views
0

私は同期メソッドでいくつかのデータベースクエリを書いています。理想的には、あるコードがこのコードブロック内で実行されている場合、他のスレッドはこれにアクセスすべきではありませんが、私の場合は時々そうです。同期ブロックandroid

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

      // some database code 

      // printing log at the end 
    } 

したがって、最初に印刷したログは2回印刷されます。どのようにこのことをブロックするには?

+0

なぜ同期化されたブロックにクエリを配置するのかについての具体的な理由はありますか? – dymmeh

+0

あなたはそれが入っているクラスの複数のインスタンスでfunc1を呼び出していますか? – jqpubliq

+0

これは同期されたブロックではなく、同期されたメソッドです 同期化されたブロックの形式は です(ロックオブジェクト){ // some code } :::それはあなたの質問にちょっと差がありませんそれを指摘する。 – ilomambo

答えて

0

同期ブロックは、func1()を呼び出すオブジェクトに対してロックを使用します。異なるオブジェクトを使用して異なるスレッドからfunc1を呼び出すと、遭遇した状況が可能です。

あなたは

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

を持っており、2つの異なるスレッドから呼び出すと仮定すると、新しいA()。func2の()は、関数func1()は、この場合にはスレッドセーフではありません。

例でクラスAのインスタンスが1つしかない場合は、動作する必要があります。

関連する問題