2012-07-27 48 views
1

我需要基本上爲當前項目編寫一個鎖,當連接失敗時,調用給定方法的所有線程都應該掛起,直到連接重新建立。阻止給定對象上的所有線程

如何在Java中再次執行此操作?自從我必須處理這個問題已經有一段時間了。

回答

2

您可以在方法內部等待Condition。條件會是這樣的:

while (!conn.isConnected) condition.await() 

當然,這個僞代碼還有很多。

您也可以閱讀所謂的circuit breaker pattern。一種流行的羅嗦的事情,但它的目標是管理可能失敗的集成點,如連接到數據庫。

0

只有在連接重新建立之前,您不能從方法中返回嗎?實際實現將取決於此方法以及如何管理此連接。您可以在對象上使用wait(),並且當另一個負責重新連接的線程重新建立連接時,請致電notify()解鎖該方法。這樣,調用方法的任何東西都會被阻塞,因爲連接關閉時該方法永遠不會返回。

0

可以使用Object class wait()和notifyAll的()方法:

public final void wait(long timeout) throws InterruptedException 

導致當前的線程等待,直到其他線程調用 notify()方法或對notifyAll的()方法此對象或指定的時間量已過去。

public final void notifyAll() 

喚醒在等待該對象的監視器上的全部線程。 A 線程通過調用等待 方法之一等待對象的監視器。

但是,這絕不是唯一對您開放的解決方案。還有其他synchronisation mechanisms in Java