我有一个在多线程上运行的Swing应用程序,我在EDT上创建了Swing组件。Executor启动在某个时刻向JTextArea插入文本的线程。但是,与InvokeAndWait不同,InvokeLater并不总是执行追加操作。据我所知,它是异步的,非阻塞的,但仍然应该做附加。怎么会这样呢?
谢谢
发布于 2015-11-15 00:59:10
使用EventQueue.invokeLater()从另一个线程更新组件的模型是正确同步的必要条件,但不是充分条件。您仍然需要同步对任何共享数据的访问。在这个example中,display()参数s是对不可变String的final引用;可以在display()中安全地访问它,而无需进一步的同步。如果您有一个对可变对象的final引用,请考虑使用thread-safe collection。您可以使用引用的here方法之一来查找违规行为。或者,考虑使用SwingWorker来托管example的后台任务。
https://stackoverflow.com/questions/33708881
复制相似问题