Java线程安全顺序方法调用

时间:2012-02-16 11:54:35

标签: java thread-safety

如何编辑以下代码,以便在clearAndSave()方法中,save()始终在clear()完成其作业后运行。

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.
     }
}

3 个答案:

答案 0 :(得分:1)

如果clear()或save()都没有创建新线程,它们将始终按顺序执行。

答案 1 :(得分:1)

它将始终以这种方式运行,因为clear和save在同一个线程中运行。你没有创建一个新线程并从新线程或类似的东西中调用其中一个。如果你想让一切都停止,直到它们都运行,你会做:

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

答案 2 :(得分:1)

如果没有获取线程,除非修改线程代码并使用某种机制使第二个线程等到第一个线程完成,否则无法实现该效果。您可以将线程A的引用传递给线程B并从B调用A.join传递,或者您可以实例化SemaphoreCountDownLatch并将它们传递给线程,或者制定您自己的机制等待通知。

但是,这会使您的代码更复杂。如果你不需要并发,那就去除线程。