Java侦听器在同步过程中是等待还是丢弃?

Java侦听器在同步过程中是等待还是丢弃?,java,events,synchronized,Java,Events,Synchronized,在事件侦听器中,我有: public void keyPressed(KeyEvent e) { //the same logic for mouse events, etc. synchronized(lockFoo) {...} } 在代码的其他地方,在不同的线程上: public void bar() { synchronized(lockFoo) {...} } 如果两个或两个以上的事件在lockFoo被锁定时触发,他们将FIFO提示并等待轮到他们,还是将被丢弃?FIFO

在事件侦听器中,我有:

public void keyPressed(KeyEvent e) { //the same logic for mouse events, etc.
   synchronized(lockFoo) {...}
}
在代码的其他地方,在不同的线程上:

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

如果两个或两个以上的事件在lockFoo被锁定时触发,他们将FIFO提示并等待轮到他们,还是将被丢弃?FIFO提示是更可取的行为

它们将等待轮到它们,最终将以不可预测的顺序执行(没有严格的FIFO)。

线程肯定会排队,但顺序取决于
线程优先级,否则是随机的。没有FIFO的保证。

如果要使用FIFO,请将fair构造函数参数设置为“true”时使用。使用通用同步根本不可能。

尽管制作线程测试用例很少有趣,为什么不自己尝试呢?如果没有得到预期的结果,请澄清一下?我不知道,任何试图获得监视器锁的线程都会等到锁被释放。锁定时,等待的线程将进入睡眠状态并停止处理。这可能会导致丢弃传入事件,但这取决于系统。@--A--C:这样做不会区分“几乎总是”和“总是”。