我怎样才能让 SwingUtilities.invokeLater 更快地执行任务?

How can I make SwingUtilities.invokeLater execute tasks faster?

我用SwingUtilities.invokeLater更新了UI。有时任务几乎在调用 invokeLater 时立即执行,但有时它需要几秒钟,我想避免。有什么设置可以帮我解决这个问题吗?

我知道任务是在 AWT 事件调度线程中执行的,但是有没有办法强制清除它的队列(可能不是一个好主意),或者以某种方式添加另一个 AWT 线程以并行工作,或任何其他可能有助于更快执行任务的解决方案?

甚至有可能影响这些东西,还是我只能自己创建一些守护线程?我想避免这种情况。

你试过SwingUtilities.invokeAndWait()了吗?听起来您不想让程序执行与 Swing 操作线程化的其他事情,您希望它们现在就完成。

当然,这实际上不会导致它们在更少的 CPU 周期内完成,如果已经有东西在调度线程中排队,这并不能消除它们或任何东西.

还有一些事情,比如从文件加载图像,可以同步或异步完成——如果你想消除暂停,你可以确保这些是按你想要的方式完成的。

有些事情必须在事件处理程序线程上完成。 Swing 不是线程安全的,不遵循该规则会发生奇怪的事情。

由于只有一个这样的线程(并且您不能创建其他线程),请确保它只用于必要的事情。所以,不要在该线程上进行复杂的计算。检查您的 paintComponent() 方法、invokeLater() 调用等耗时部分。

要么优化它们的性能,要么将它们重构为其他一些“工作”线程。您可以拥有任意数量的工作线程,只要它们不调用 Swing 方法即可。您询问 invokeLater() 这一事实意味着除了事件处理程序之外,您已经至少使用了一个线程。

一个像样的分析器工具将在这个过程中有所帮助。