2012-08-22 43 views
1

我有一個支持方法,應該在執行期間停止,並應等待發生特定的flagevent發生。停止方法執行並等待事件?

目前我只是pollingapplication-scoped variable。如果它被任何其他請求設置,那麼等待方法可能會繼續。

但是polling正確的方法,還是有更好的?

+0

我猜信號來自另一個線程? – Tudor

+1

否來自另一個servlet。我不是手動創建線程。 – membersound

+0

好的,但servlet在自己的線程上運行正確嗎? – Tudor

回答

3

希望我明白這個權利。輪詢效率低下,因爲它浪費CPU週期。可以使用一個對象作爲信號:

Object signal = new Object(); 
volatile boolean shouldWait = true; 
在等待方法

// ...  
synchronized(signal) { 
    while(shouldWait) { 
     signal.wait(); 
    }  
} 
在信令代碼

synchronized(signal) { 
    shouldWait = false; 
    signal.notify(); 
} 
+1

shouldWait必須是易失性的。另外你如何告訴一個Servlet在另一個Servlet中更新一個變量(我有一個想法,但也希望聽到你的想法)? – Eugene

+0

@Eugene:你不能有一個兩個servlet都能看到的全局變量嗎?就像他在最初版本中用來輪詢的那個一樣。感謝'易變的'順便說一句。 – Tudor

+1

確定你是對的,但是在要求無狀態的Servlet的情況下定義* global *並不那麼容易。如果你是全球性的,你的意思是ServletContext ... – Eugene

2

我建議使用Observer圖案,其中所述第一servlet將是實現Observable的對象的observer。當發生什麼事情時,第二個servlet會更新observable,並調用setChanged()方法,該方法反過來會通知觀察者(在這種情況下爲您的第一個servlet)。