我喜欢将invokeLater()
工作单元发送到 AWT EDT 的简单性。最好有一个类似的机制来将工作请求发送到后台线程(例如 SwingWorker),但据我了解,这些没有任何类型的事件队列和调度机制,这正是 invokeLater() 所依赖的。
因此,相反,我最终为我的后台线程提供了一个阻塞队列,其他线程向该队列发送消息,并且线程本质上运行一个接收循环,阻塞直到消息到达。
事实上,这可能正是人们在后台线程中实现类似 EDT 行为的方式(或者会这样吗?)。另一方面,我喜欢简单的线程,它只是惰性地悬挂在那里,每当它们碰巧从天空中一些看不见的事件调度队列被调度到它时处理“工作液滴”。Java 是否提供了一种方法来创建这种“事件驱动的工作线程”?还是消息队列是正确的方法呢?与此相关的是invokeLater()
,消息传递技术是否存在缺点?