2013-02-08 37 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。

相关问题