我在互联网上搜索但未能找到满意的答案。 OSGi容器中存在什么样的线程模型?它是否只是为每个注册的包生成一个新线程,例如?有关线程模型的任何参考都会很棒。
答案 0 :(得分:10)
你没有找到任何东西,因为没有“OSGi线程模型”这样的东西。 Bundles只是存在,除非他们启动它们,否则不会“拥有线程”。
答案 1 :(得分:4)
OSGi框架遵循同步模型,即。一切都按严格的顺序发生。捆绑包不在线程中执行(但它们有自己的类加载器实例)。但是有一些例外。例如,当通过 postEvent 方法引发事件时,事件的传递是异步完成的,通常在许多框架实现中作为线程实现。
答案 2 :(得分:4)
启动捆绑包时,激活器中的代码在一个线程中执行,类似于“主”线程。当主线程完成其执行时,bundle将从“Starting”状态更改为“Active”状态。因此,最好在另一个线程中执行耗时的代码并从主线程启动另一个线程。
从服务使用者调用服务方法时。那时,服务方法中编写的代码在服务使用者的线程中执行。
我没有发现服务方法中静态变量和局部变量之间有任何区别。
答案 3 :(得分:0)
除了一些特殊情况(事件/监听器)之外,应用程序线程也更加严格地管理和限制。您可以自由使用线程。您需要注意,bundle lifecylce中的某些操作必须(因此)线程安全,并且您需要非常小心地干净地拆除线程。您还需要注意不要长时间阻止OSGi操作。