我有一个 MouseListener 线程,每次点击时都会调用此方法:
public void mousePressed(MouseEvent event){
//my Logic here
}
现在发生的情况是在很短的时间内有很多点击,而我这里的逻辑需要更多的时间来处理。我所期待的是,进一步的点击将被丢弃,这种方法将在最近的即将到来的点击中继续。
但是发生了什么,当逻辑正在处理时,传入的点击被排队,甚至当点击停止时,排队的点击继续调用这个 mousePressed 方法,结果我有多个延迟执行。
不幸的是,我无法控制监听器(为什么它会发送延迟点击),所以在这种情况下,你能告诉我什么是有效的处理方式,这样我就不会因为延迟我的处理。
我认为最明显的方法是使用另一个线程,但我想知道这可能会在短时间内触发这么多线程,或者有什么方法可以只锁定一个线程,而其余的点击只是通过空循环?
最佳答案
更新:请参阅 Phillip 的评论,了解为什么这对 Swing 不起作用!
很遗憾,您无权访问 eventListener
。理想的解决方案是在执行回调时注销回调。
这是一个解决方案,它模拟在回调函数执行时取消注册,假设您希望排队的点击消失:
private AtomicBoolean engaged = new AtomicBoolean(); // thread-safe boolean
public void mousePressed(MouseEvent event){
if (!engaged.get()) {
engaged.set(true);
// your logic here
engaged.set(false);
}
}
AtomicBoolean充当测试和设置锁,防止多个线程同时运行按下的事件回调。排队的打印机将在锁定期间消散。
关于java - 有效实现此 Java MouseListener 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8981124/