我正在开发OSGI项目。有很多服务使用事件管理,发送和处理事件。似乎事件管理员在单个线程中处理事件。当handleEvent函数被激活时,任何其他句柄事件函数都不会启动,直到运行handleEvent函数退出。我测试了Thread.sleep函数。
我想知道是否有任何配置或参数使事件管理员以多线程方式处理事件。
我正在使用eclipse neon 3和equinox附带它。
答案 0 :(得分:0)
这取决于您使用的事件管理impl。对于felix eventadmin,默认使用20个线程并且它是可配置的。
您还应该使用eventAdmin.postEvent来确保异步传递。
答案 1 :(得分:0)
规范为使用的线程数提供了余地。但是,有一种保证可能代价高昂。必须按给定的处理程序传递事件。这限制了并行交付。您可以注册一个服务属性event.delivery=async.unordered
,它将删除处理程序的约束,并允许事件管理员在交付事件时有更多的余地。
我发现很难相信Equinox版本只会使用一个线程......
要详细了解活动管理,请阅读教程OSGi Event Admin – Publish & Subscribe