gpt4 book ai didi

java - 防止两个事件同时发生

转载 作者:行者123 更新时间:2023-12-01 19:56:55 25 4
gpt4 key购买 nike

关于:有两个线程正在运行 - 一个线程检查超时(一段时间内不活动),另一个线程是用户使用 UI 的地方。
问题:超时事件在用户操作之前发生,即使是在同一毫秒,根据日志我可以看到它

2018-03-15 16:58:54:921 INFO  <main> {Thread-58} [InputTimeoutThread] Input timeout occured.
2018-03-15 16:58:54:921 DEBUG <main> {AWT-EventQueue-1} [INPUT_EVENT] Input event : functionKeyID = 10056
2018-03-15 16:58:54:921 DEBUG <main> {AWT-EventQueue-1} [FunctionManagerImpl] Calling function [ID (10056)]

结果:结果不一致,因为调用了超时注销事件,但同时完成了用户操作。
如果超时发生在用户操作之前,它会阻止用户执行任何操作,但正如您所看到的,这并没有发生在这里。

有人可以建议如何解决这个问题吗?这样就可以保证:在某个事件发生后(在不同的线程中)不可能执行任何操作。

最佳答案

您可以使用某种技术在线程之间传输数据。例如,您可以使用 volatile 原语:私有(private) volatile boolean 值 isTimeoutElapsed = false;然后在超时的线程中你可以这样做:

isTimeoutElapsed = true;

在 UI 线程中:

if (!isTimeoutElapsed)
{
doAction();
};

关于java - 防止两个事件同时发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49323559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com