加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何在Java中创建“事件驱动的”后台线程?

发布时间:2020-12-14 19:15:37 所属栏目:Java 来源:网络整理
导读:我喜欢invokeLater()的简单性,用于将工作单元发送到AWT EDT.有一个类似的机制可以将工作请求发送到后台线程(例如SwingWorker),但据我所知,它们没有任何类型的事件排队和放大器.调度机制,这是invokeLater()所依赖的. 所以相反,我最终给我的后台线程一个阻塞队

我喜欢invokeLater()的简单性,用于将工作单元发送到AWT EDT.有一个类似的机制可以将工作请求发送到后台线程(例如SwingWorker),但据我所知,它们没有任何类型的事件排队和放大器.调度机制,这是invokeLater()所依赖的.

所以相反,我最终给我的后台线程一个阻塞队列,其他线程向其发送消息,并且该线程实际上运行一个接收循环,阻塞直到消息到达.

事实上,这可能正是人们如何在后台线程中实现类似EDT的行为(或者它会是什么?).另一方面,我喜欢简单地悬挂在那里的线程的简单性,只要碰巧从天空中的一些看不见的事件调度队列发送到它就处理“工作水滴”. Java是否提供了创建这种“事件驱动的工作线程”的方法?或者是消息排队正确的方法来执行此操作吗?而且在相关的情况下,消息传递的invokeLater()技术有缺点吗?

最佳答案
你应该看一下java.util.concurrent,更具体地说是Executor,它通常只是一个可以处理这样一个请求的线程池:executor.execute(runnableTask);.如果您希望单个线程处理所有请求,则使用单个线程创建您的线程:executor = Executors.newSingleThreadExecutor()’.还有ExecutorService,它可以在任务完成时返回一个值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读