使用Guava EventBus进行Java多线程处理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Guava EventBus进行Java多线程处理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1310字,纯文字阅读大概需要2分钟。
内容图文
![使用Guava EventBus进行Java多线程处理](/upload/InfoBanner/zyjiaocheng/804/23b16649e628417bba7ad4f53d3339e9.jpg)
我正在使用番石榴事件总线.我有一个类似服务器的对象应该一直在运行,监听要发布给b us的事件.所以在junit测试中(MyObject是测试中的类),我在它自己的线程中创建它来模拟这个并阻止阻塞:
@Test
public void test() {
EventBus eventBus = new EventBus();
Thread thread= new Thread() {
@Override
public void run()
{
logger.debug("Creating new thread");
MyObject myObject = new MyObject(eventBus);
}
};
thread.start();
...
}
一切都很好,myObject是在自己的线程Thread1中创建的.然后,我在测试中将事件发布到事件总线:
eventBus.post(triggerObject);
我发现的奇怪的事情是,我在MyObject类中的订阅方法的所有操作/日志记录都在主线程中再次执行. myObject等待来自某些其他部分的响应,这会阻止我的测试,因为它在主线程中.为什么会这样?我在EventBus或Java线程上做错了吗?
解决方法:
好吧,除了创建一个最终在堆中的对象(在线程之间共享)之外,你不会在创建的线程中做任何事情,但由于对它的引用是在运行后没有保持,所以它也会丢失.
myObject中的@Subscribe方法在调用eventBus.post(event)的同一个线程中调用;而不是在创建myObject的线程中.
The weird thing I am finding is that all the actions/logging from my subscribed method inside of MyObject class are executing in the main thread again
如果你的MyObject类有一个@Subscribe方法,为什么它需要构造函数中的EventBus实例?你可能想要
MyObject myObject = new MyObject();
eventBus.register(myObject);`
而不是MyObject myObject = new MyObject(eventBus);
内容总结
以上是互联网集市为您收集整理的使用Guava EventBus进行Java多线程处理全部内容,希望文章能够帮你解决使用Guava EventBus进行Java多线程处理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。