2011-08-01 99 views
0

只是尋求一些一些確認:Java同步問題

我與Swing GUI服務器對象,包含一方法handle(),受外部線程訪問,而另一種方法doThis(),這是從服務器對象的運行GUI。

我知道Swing事件處理髮生在事件分派線程上,所以它實際上是訪問doThis()的事件分派線程。

有可能是doThis()handle()會導致干擾。爲了避免這種情況,我應該讓兩種方法同步正確嗎?這將阻止事件分派線程和其他外部線程在另一個完成之前調用一個方法。

我的推理是否正確?

回答

0

the Java tutorial on synchronization

使得這些方法同步有兩個作用:第一,它不可能的同一對象來交織上同步方法的兩個調用。當一個線程正在執行一個對象的同步方法時,所有其他線程調用同一對象的同步方法塊(掛起執行),直到第一個線程完成對象。其次,當一個同步方法退出時,它會自動建立一個與先前同步對象的任何後續調用同步方法的before-before關係。這保證了對所有線程都可見的對象狀態的更改。

所以是的。

+0

本身,這可能不足以在Swing GUI中維護[liveness](http://download.oracle.com/javase/tutorial/essential/concurrency/liveness.html)。 – trashgod

1

取而代之,使用SwingWorker; TwoRoot就是一個簡單的例子。在後臺放置handle(),在process()放置doThis()