2012-02-16 90 views
0

如何编辑以下代码,以便在clear()方法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 2012-02-16 21:40:07

回答

1

没有得到线程的骑行,它是不可能的,除非你修改线程代码,并使用某种机制来达到这样的效果使第二个线程等到第一个线程完成。您可以将线程A的引用传递给线程B,并从B调用A.join,或者您可以实例化一个SemaphoreCountDownLatch并将它们传递给线程,或者使用wait-notify制定自己的机制。

但是,这会让你的代码更复杂。如果你不需要并发,那就摆脱线程。

1

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

+0

我错过了我的问题,现在更新了 – 2012-02-16 12:17:59

1

它总是以这种方式运行,因为清除和保存运行在同一个线程中。你不是创建一个新的线程,并从新的线程或其他任何东西中调用其中的一个。如果你想使一切停止,直到他们都来看,你会怎么做:

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