在 JVM 服务器环境中,在 OSGi 框架中运行的应用程序可使用 ExecutorService 创建在 CICS® 任务上异步运行的线程。
CICS 提供 Java™ ExecutorService 接口的实现。该实现创建可使用 JCICS API 访问 CICS 服务的线程。JVM 服务器在启动时将 CICS ExecutorService 注册为 OSGi 服务。使用该服务(而非 Java Thread 类)来创建可使用 JCICS 的任务。
CICS 提供的 ExecutorService 在 OSGi 框架中注册为高优先级,以便供应用程序用来创建线程。通常,应用程序使用最高优先级 ExecutorService,除非它过滤服务以使用具体实现。
如果您要在应用程序中创建线程,那么首选方法是使用 OSGi 注册表中的通用 ExecutorService。当应用程序在 JVM 服务器中运行时,OSGi 注册表自动使用 CICS ExecutorService 来创建 CICS 线程。 该方法意味着应用程序与实现分离,因此您不必使用 JCICS API 方法来创建线程。
但是,如果编写特定于 CICS 的应用程序,那么可以选择在 JCICS API 中使用 CICSExecutorService 类以请求新线程。
该类实现 java.util.concurrent.ExecutorService 接口。CICSExecutorService 类提供名为 runAsCICS() 的静态方法,该方法可用于提交 Runnable Java 对象以在启用 JCICS 的新线程上运行。runAsCICS() 方法是实用程序方法,用于执行 OSGi 注册表查找以获取应用程序的 CICSExecutorService 实例。
因为该类注册为 Java ExecutorService 接口的实现,所以任何请求 ExecutorService 的应用程序在 JVM 服务器中运行时只会获得 CICSExecutorService。
CICSExecutorService.runAsCICS(Runnable runnable)
必须使用 execute() 方法创建能够使用 JCICS 的线程。如果使用 submit() 方法,应用程序将获得无法运行 JCICS 的 Java 线程。
对于不在 OSGi 框架中运行的应用程序(例如 Axis2 Java 程序),只能在初始应用程序线程上访问 JCICS,因为 ExecutorService 不可用。 此外,在采取以下任何操作之前,还必须确保除初始线程以外的所有其他线程都已结束: