Java SwingUtilities.isEventDispatchThread()是否线程安全?
报价表 一些Swing组件方法在API规范中被标记为“线程安全”;这些可以从任何线程安全地调用。必须从事件分派线程调用所有其他Swing组件方法 在同一页的下面几行 如果需要确定代码是否在事件调度线程上运行,请调用Java SwingUtilities.isEventDispatchThread()是否线程安全?,java,swing,thread-safety,event-dispatch-thread,Java,Swing,Thread Safety,Event Dispatch Thread,报价表 一些Swing组件方法在API规范中被标记为“线程安全”;这些可以从任何线程安全地调用。必须从事件分派线程调用所有其他Swing组件方法 在同一页的下面几行 如果需要确定代码是否在事件调度线程上运行,请调用javax.swing.SwingUtilities.isEventDispatchThread 因此,像SwingUtilities.invokeLater这样的线程安全方法用如下文本“标记”: 与Swing的其余部分不同,此方法可以从任何线程调用 但是SwingUtilities.
javax.swing.SwingUtilities.isEventDispatchThread
因此,像SwingUtilities.invokeLater
这样的线程安全方法用如下文本“标记”:
与Swing的其余部分不同,此方法可以从任何线程调用
但是SwingUtilities.isEventDispatchThread()
的API文档没有将其“标记”为线程安全
如果当前线程是AWT事件调度线程,则返回true
这意味着我只能在事件调度线程上调用它。但是这没有任何意义,所以我非常确定这个方法是线程安全的
对吧?
web上对此有任何确认吗?true/false作为isEventDispatchThread notify返回,关于EDT是否处于活动状态(返回为true),否则(EDT队列为空加上一些超时)返回false,我认为API中不需要一些线程安全性,只是关于状态的通知器No,这并不意味着你“只能在事件发送线程上调用它”。你从哪里得到这个主意的?如果是,则返回true,否则返回false。dispatcher线程是否真的可能是线程不安全的?这只是一点信息,对于一个线程来说是正确的,对于所有其他线程来说都是错误的。不完全是易失性数据。引用了另外两种查找冲突的方法。请注意,
EventQueue.isDispatchThread()
不是“Swing组件方法”。那么,问题可能是:“Swing组件方法”是什么。我假设了javax.swing.*
包中每个类上的每个方法,包括SwingUtilities
。否则就没有必要将SwingUtilities.invokeLater
标记为线程安全。因此,如果SwingUtilities
是一个“Swing组件”,那么它的isEventDispatchThread()
方法应该标记为线程安全,如果它是线程安全的。true/false作为isEventDispatchThread的返回,通知是否EDT处于活动状态(返回为true),否则(EDT队列为空加上一些超时)返回false,我认为API中不需要一些线程安全性,只是一个关于状态的通知程序。不,这并不意味着您“只能在事件调度线程上调用它”。你从哪里得到这个主意的?如果是,则返回true,否则返回false。dispatcher线程是否真的可能是线程不安全的?这只是一点信息,对于一个线程来说是正确的,对于所有其他线程来说都是错误的。不完全是易失性数据。引用了另外两种查找冲突的方法。请注意,EventQueue.isDispatchThread()
不是“Swing组件方法”。那么,问题可能是:“Swing组件方法”是什么。我假设了javax.swing.*
包中每个类上的每个方法,包括SwingUtilities
。否则就没有必要将SwingUtilities.invokeLater
标记为线程安全。因此,如果SwingUtilities
是一个“Swing组件”,那么它的isEventDispatchThread()
方法如果是线程安全的,则应该标记为线程安全的。