事件派遣线程

原文: https://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html

Swing 事件处理代码在称为事件派发线程的特殊线程上运行。大多数调用 Swing 方法的代码也在这个线程上运行。这是必要的,因为大多数 Swing 对象方法都不是“线程安全的”:从多个线程调用它们会导致线程干扰内存一致性错误。一些 Swing 组件方法在 API 规范中标记为“线程安全”;这些可以从任何线程安全地调用。必须从事件派发线程调用所有其他 Swing 组件方法。忽略此规则的程序可能在大多数情况下正常运行,但会遇到难以重现的不可预测的错误。

将事件调度线程上运行的代码视为一系列简短任务是有用的。大多数任务都是事件处理方法的调用,例如ActionListener.actionPerformed。其他任务可以通过应用程序代码使用invokeLaterinvokeAndWait进行调度。事件派发线程上的任务必须快速完成;如果他们不这样做,未处理的事件将备份,用户界面将无法响应。

如果需要确定代码是否在事件派发线程上运行,请调用 javax.swing.SwingUtilities.isEventDispatchThread