我有一个在多个线程上运行的 Swing 应用程序,我在 EDT 上创建了 Swing 组件。Executor 会在某个时候启动将文本插入 JTextArea 的线程。但是,与 InvokeAndWait 不同,InvokeLater 并不总是执行附加操作。正如我收集的那样,它是异步的、非阻塞的,但仍然应该进行附加。怎么会这样?
谢谢
我有一个在多个线程上运行的 Swing 应用程序,我在 EDT 上创建了 Swing 组件。Executor 会在某个时候启动将文本插入 JTextArea 的线程。但是,与 InvokeAndWait 不同,InvokeLater 并不总是执行附加操作。正如我收集的那样,它是异步的、非阻塞的,但仍然应该进行附加。怎么会这样?
谢谢
EventQueue.invokeLater()
用于从另一个线程更新组件的模型是正确同步的必要条件——但不是充分条件。您仍然需要同步对任何共享数据的访问。在此示例中,display()
参数s
是对不可变final
对象的引用;无需进一步同步即可安全访问它。如果您有对可变对象的引用,请考虑使用线程安全集合。您可以使用此处引用的一种方法来查找违规行为。或者,考虑使用 a来托管后台任务,例如. String
display()
final
SwingWorker