【发布时间】:2020-11-02 09:10:22
【问题描述】:
我有一个将在 IBM Liberty 应用服务器上运行的 Java 应用程序;我正在尝试将多线程与CICSExecutorService 一起使用。这是我的用例:
- 创建
CICSExecutorService的实例; - 从实现
CICSTransactionCallable的类创建一个线程(对 Db2 进行简单的选择查询); - 将线程提交给执行器服务;
- 关闭执行器服务,等待终止;
这是代码:
CICSExecutorService cicsExecutorService = new CICSExecutorService();
//CICSReadingJob is the class that implements CICSTransactionCallable interface
CICSReadingJob<String> thread1 = new CICSReadingJob<>();
Future<List<String>> future1 = cicsExecutorService.submit(thread1);
cicsExecutorService.shutdown();
cicsExecutorService.awaitTermination(100, TimeUnit.SECONDS);
我使用标准的 java executor 服务做了一些简单的本地测试,其行为是,在调用 shutdown 和 awaitTermination 方法后,程序等待线程终止(除非线程的执行时间超过 100 秒,指定的超时),然后执行继续。问题是,当我使用上面的代码时,我看到了一种不同的行为:事实上,如果线程(唯一与CICSExecutorService 连接的线程)在 (到达call() 方法的末尾)。我也尝试使用静态方法CICSExecutorService.runAsCICS() 而不是cicsExecutorService.submit(),但我得到了相同的结果。似乎子线程在到达call() 方法的末尾时也保持活动状态,因此awaitTermination 一直等到超时结束。有什么建议吗?
【问题讨论】:
标签: java multithreading executorservice websphere-liberty cics