在Java中,如何将子线程中的事件传递给主线程而不会在循环中冻结主线程?
在线我只能找到涉及主要线程卡在无限循环中的解决方案,检查~/.gitconfig/
(孩子放置事件的地方)中的事件。
然后睡觉shared thread-safe event FIFO queue
秒并重新开始。
我需要主线程处于活动状态并执行其他操作,例如能够处理来自gui的事件。当子线程中发生某些事情时,主线程必须调用x
。
答案 0 :(得分:0)
如果你真的需要以这种方式使用子线程,你可能需要使用并发队列。
如果您使用swing,可以使用SwingUtilities.invokeLater()来执行代码。然后它将在后台线程中运行它,而不是手动使用子线程。
答案 1 :(得分:0)
为了避免冻结UI,这应该可以解决问题:
1)传入工作并发队列,其中工作线程或工作线程池正在检查其运行方法。
2)完成并发队列,其中一个与UI线程不同的侦听器线程检查循环。侦听器线程使用异步设施/方法调用UI的更新,以避免UI异常。
因此,UI线程使用事件或数据为传入的工作队列提供信息。工作线程将其拾起,完成工作并将结果发布到完成工作的队列。
侦听器线程检查工作完成队列中的新项目,并将结果异步发布到UI。