2013-02-08 72 views
1

在一個事件監聽器,我有:Java偵聽器在同步期間是否等待或丟棄?

public void keyPressed(KeyEvent e) { //the same logic for mouse events, etc. 
    synchronized(lockFoo) {...} 
} 

而其他地方的代碼,在不同的線程:

public void bar() { 
    synchronized(lockFoo) {...} 
} 

如果或多個事件觸發而lockFoo被鎖定,他們會FIFO提示並等待輪到他們或將被丟棄? FIFO Cuing是更理想的行爲。

+1

雖然使線程測試用例很少有趣,但爲什麼不自己嘗試,如果你沒有得到預期的結果,請澄清? –

+0

關閉我的頭頂,任何試圖獲取監視器鎖的線程都會等待,直到釋放鎖。當被鎖定時,等待的線程將進入睡眠並停止處理。這可能會導致傳入的事件被丟棄,但這取決於系統。 – MadProgrammer

+0

@ - A - C:這樣做不會區分「幾乎總是」和「總是」。 –

回答

2

如果你想使用FIFO - 然後使用ReentrantLock與公平的構造函數參數設置爲「true」。使用泛型同步是完全不可能的。

+0

謝謝。但是,它會幫助你顯示一些代碼。 –

+1

https://gist.github.com/jdevelop/4740621 – jdevelop

0

他們會等待輪到他們,最終會以不可預知的順序執行(沒有嚴格的FIFO)。

0

線程將排隊等待,但順序取決於Thread Priority,否則隨機。無法保證FIFO。

相關問題