2012-02-16 4 views
0

clearAndSave()メソッドのsave()は、clear()がジョブを終了した後に常に実行されるように、次のコードを編集するにはどうすればよいですか?Javaスレッドセーフなシーケンシャルメソッド呼び出し

clear()およびsave()メソッドは、新しいスレッドを作成するオブジェクトを使用します。

public class Test { 
    public void clearAndSave() { 
     clear(); 
     save(); 
    } 

    private void clear(){ 
     // Deletes everything from DB. 
    } 

    private void save(){ 
     // Adds new data into DB. 
    } 
} 
+0

'clear()' _before_ 'save()'で作成された 'Thread'とのどのような結合が呼び出されていますか? – Gray

答えて

1

をスレッドの乗り心地を得ることなく、あなたがスレッドのコードを変更してまで、いくつかのメカニズムを使用しない限り、その効果を達成することはできません最初のスレッドが完了するまで、2番目のスレッドを待ちます。スレッドAのリファレンスをスレッドBに、そしてBコールA.joinに渡すか、SemaphoreまたはCountDownLatchをインスタンス化してスレッドに渡すか、wait-notifyで独自のメカニズムを作成することができます。

これにより、コードが複雑になります。並列処理が必要ない場合は、スレッドを削除してください。

1

clear()またはsave()のどちらも新しいスレッドを作成しない場合、それらは常に順番に実行されます。

+0

私の質問で何かを逃しました。今更新されました –

1

クリアとセーブが同じスレッドで実行されているので、常にその方法で実行されます。あなたは新しいスレッドを作成せず、新しいスレッドやそのようなものからそのスレッドの1つを呼び出しているわけではありません。あなたはすべてが彼らまで、両方の実行を中止したい場合は、あなたがしたい:

synchronized(this) { 
    clear(); 
    save(); 
}