使用 WebSphere Application Server 开发高性能 J2EE 线程
2009-09-30 00:00:00 来源:WEB开发网核心提示: 如果将WorkManager 用作全局线程池(图 2),则每次向线程分配工作时,使用 WebSphere Application Server 开发高性能 J2EE 线程(2),提交给线程池的每项工作都将具有应用于线程(或从线程中删除)的应用程序上下文:将工作提交给 WorkManager 线程
如果将WorkManager 用作全局线程池(图 2),则每次向线程分配工作时,提交给线程池的每项工作都将具有应用于线程(或从线程中删除)的应用程序上下文:
将工作提交给 WorkManager 线程池(蓝框)
获取 J2EE 应用程序上下文的快照,并将其作为 WWEC 对象与该工作存储在一起。
将 WWEC 添加到池的输入队列。
工作线程从输入队列提取一个 WWEC,并运行它。
获取工作线程上当前 J2EE 应用程序上下文的快照,以便在工作完成之后进行恢复。
将与 WWEC 一起存储的 J2EE 上下文应用到线程。
运行工作。
从线程删除 J2EE 上下文,并重新应用以前的上下文。
工作线程现在等待更多工作出现在输入队列上。
图 2. 与 WorkManager 共享的全局线程池
图片看不清楚?请点击这里查看原图(大图)。
组件范围的线程池
如果线程池仅由单个应用程序或组件(如 Servlet 或 EJB)使用,并且要提交的工作可以容许单一通用的 J2EE 上下文标识,那么将自定义线程池与线程工厂一起使用可以显著提高性能。这是组件范围的线程池。
组件范围的线程池线程都将共享创建它的应用程序组件的 J2EE 上下文。例如,如果由启动 Bean 创建一个线程池,则每个线程将包含启动 Bean 的 start() 方法的上下文,并且每个线程的行为就好像在该启动 Bean 的范围中运行一样。因此,启动 Bean 是线程池实例的所有者。不论提交工作的 Servlet 或 EJB 如何,所有业务逻辑都将在 java:comp 命名空间和启动 Bean 的 start() 方法的安全上下文中运行。
Tags:使用 WebSphere Application
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接