有什么方法可以确定EventQueue 中当前有多少Runnables 排队?...我的意思是系统EventQueue,即所有要在EDT 中运行的Runnables。也许会弄乱队列?
我想做的是优先考虑 GUI Runnables ......如果出现用户驱动的 GUI 事件,它应该立即执行,在任何排队的 Runnables 之前跳过队列(顺便说一下,它们都将关注修改不可见的 Swing 组件。注意最新的 Swing 指南:所有 Swing 组件都必须在 EDT 上更改,即使是隐藏的)。
有可能使用“紧急”和“非紧急”Runnables 建立一个简单的、人为的队列:每个 Runnable 可以增加一个“可观察的”AtomicInteger 计数器,然后每个 Runnable 的执行都可以递减它......并且 BlockingQueue 将确保仅当 BlockingQueue 大小更改为 1(或者可能是 2 或 0)时,非紧急 Runnables 才会提交给“invokeLater”。本能让我认为这样的安排会引入相当多的延迟。
另外,能够直接干扰 EDT 自己的队列会更好。我应该推出自己的 EDT 队列吗?那可能吗?
注意显然必须从非 EDT 线程中观察 EDT 队列的状态(或对其进行干预)。据我所知,可能存在“线程可见性”问题......