我正在使用番石榴事件总线。我有一个类似服务器的对象,它应该一直在运行,监听要发布给b用户的事件。所以在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线程上做错了什么?
在创建的线程中,除了创建一个最终在堆(线程之间共享)中结束的对象之外,您什么也不做,但是由于对它的引用在运行后不被维护,所以它也丢失了。
在调用EventBus.Post(事件);
的同一线程中调用MyObject
中的@subscribe
方法,而不是在创建MyObject
的线程中。
奇怪的是,我发现MyObject类中的订阅方法的所有操作/日志记录都再次在主线程中执行
如果您的MyObject
类有一个@subscribe
方法,那么它为什么需要构造函数内部的EventBus实例呢?你可能想
MyObject myObject = new MyObject();
eventBus.register(myObject);`
而不是myObject myObject=new myObject(eventBus);
本文向大家介绍使用java的HttpClient实现多线程并发,包括了使用java的HttpClient实现多线程并发的使用技巧和注意事项,需要的朋友参考一下 说明:以下的代码基于httpclient4.5.2实现。 我们要使用java的HttpClient实现get请求抓取网页是一件比较容易实现的工作: 要多线程执行get请求时上面的方法也堪用。不过这种多线程请求是基于在每次调用get方法时创建
本文向大家介绍Java多线程实现Runnable方式,包括了Java多线程实现Runnable方式的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了Java多线程实现Runnable方式的具体方法,供大家参考,具体内容如下 (一)步骤 1.定义实现Runnable接口 2.覆盖Runnable接口中的run方法,将线程要运行的代码存放在run方法中。 3.通过Thread类建立线程对象
本文向大家介绍java多线程实现文件下载,包括了java多线程实现文件下载的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java多线程实现文件下载的具体代码,供大家参考,具体内容如下 1、DownloadManager类 2、DownloadThread类 3、TestDownload测试类 代码已经测试可以运行! 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多
本文向大家介绍使用.Net实现多线程经验总结,包括了使用.Net实现多线程经验总结的使用技巧和注意事项,需要的朋友参考一下 1.简述 一般一个程序一个进程,代码是存在进程中的,进程本身不执行代码, 执行代码的是线程。 一般一个进程里就一个线程。(一个商店就一个老板娘。) 进程就是在内存中开辟了一个空间。代码,图片。。等就存在这个空间里。代码线程去执行。 默认只有一个线程。 2.前台
本文向大家介绍PHP使用Pthread实现的多线程操作实例,包括了PHP使用Pthread实现的多线程操作实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP使用Pthread实现的多线程操作。分享给大家供大家参考,具体如下: 希望本文所述对大家php程序设计有所帮助。
sellerDataList的大小=1000,sellerNames的大小=5000。 现在我想创建10个线程,并为每个线程分配相等的任务块。对于第一个sellerDataList,第一个线程应该获得500个名称的地址,第二个线程应该获得下一个500个名称的地址,依此类推。 完成这项工作的最佳方法是什么?