有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程如何在Java中跨线程传递事件?

在Java中,如何将事件从子线程传递到主线程,而不将主线程冻结在循环中

在线上,我只能找到解决方案,涉及主线程卡在无限循环中,而在shared thread-safe event FIFO queue中检查事件(子线程将事件放在那里)。 然后睡眠x秒,然后重新开始

我需要主线程处于活动状态并执行其他操作,例如能够处理gui中的事件。当子线程中发生某些事情时,主线程必须调用.eventHappened()


共 (2) 个答案

  1. # 1 楼答案

    如果确实需要这样使用子线程,则可能需要使用并发队列

    如果你使用swing,你可以使用SwingUtilities。invokeLater()来执行代码。然后,它将在背景线程中运行它,而不是手动使用子线程

  2. # 2 楼答案

    为了避免冻结UI,这应该做到以下几点:

    1)传入工作并发队列,其中工作线程或工作线程池正在签入其运行方法

    2)与UI线程不同的侦听器线程检查循环的“已完成工作”并发队列。侦听器线程使用异步工具/方法调用对UI的更新,以避免UI异常

    因此,UI线程向传入的工作队列提供事件或数据。工作线程拿起它,完成工作,并将结果发布到工作完成队列

    侦听器线程检查工作完成队列中的新项目,并将结果异步发布到UI