多线程如何在Java中跨线程传递事件?
在Java中,如何将事件从子线程传递到主线程,而不将主线程冻结在循环中
在线上,我只能找到解决方案,涉及主线程卡在无限循环中,而在shared thread-safe event FIFO queue
中检查事件(子线程将事件放在那里)。
然后睡眠x
秒,然后重新开始
我需要主线程处于活动状态并执行其他操作,例如能够处理gui中的事件。当子线程中发生某些事情时,主线程必须调用.eventHappened()
你可以在下面搜索框中键入要查询的问题!
在Java中,如何将事件从子线程传递到主线程,而不将主线程冻结在循环中
在线上,我只能找到解决方案,涉及主线程卡在无限循环中,而在shared thread-safe event FIFO queue
中检查事件(子线程将事件放在那里)。
然后睡眠x
秒,然后重新开始
我需要主线程处于活动状态并执行其他操作,例如能够处理gui中的事件。当子线程中发生某些事情时,主线程必须调用.eventHappened()
# 1 楼答案
如果确实需要这样使用子线程,则可能需要使用并发队列
如果你使用swing,你可以使用SwingUtilities。invokeLater()来执行代码。然后,它将在背景线程中运行它,而不是手动使用子线程
# 2 楼答案
为了避免冻结UI,这应该做到以下几点:
1)传入工作并发队列,其中工作线程或工作线程池正在签入其运行方法
2)与UI线程不同的侦听器线程检查循环的“已完成工作”并发队列。侦听器线程使用异步工具/方法调用对UI的更新,以避免UI异常
因此,UI线程向传入的工作队列提供事件或数据。工作线程拿起它,完成工作,并将结果发布到工作完成队列
侦听器线程检查工作完成队列中的新项目,并将结果异步发布到UI