清除 Java 任务

在某些情况下,可能需要在不关闭整个 JVM 的情况下终止在 Java™ 中运行的任务。 虽然不保证使用 SET TASK PURGE 会终止 Java 工作负载,但它在某些情况下可能有效。 在运行 Java 的任务上使用 SET TASK PURGE 时请谨慎。 您应该了解正在运行的工作负载,以避免潜在的破坏性影响。

关于此任务

在 CICS® TS 5.4之前,如果任务正在运行 Java ,那么不允许各个任务的 TASK PURGE 。 现在已启用 Java 任务清除,但您应该知道 Java 编程语言和 JVM 并非旨在允许在不进行协同中断处理的情况下停止线程。 CICS 采用更强的措施来强制终止线程,如果有效,那么会终止 Java 程序并产生错误。 尤其是使用 Thread.stop() 方法将 ThreadDeath 错误直接注入到应用程序中。 因此,将立即解除 Java 堆栈,并在正常应用程序流之前释放锁定。 此操作可能会使共享 Java 对象和数据处于不一致状态。 您应该仔细评估对仍在运行的任何应用程序的影响。

在理想场景中,所有 Java 代码都将设计为尊重中断。 在实践中,很难实现,尤其是在使用第三方组件时。 以下信息有助于了解为何难以实现 JVM 中的终止线程,以及 Java 程序员应遵循哪些模式使其应用程序可中断: Java 线程原语废弃

过程

如果发出 SET TASK PURGE 命令时任务正在 Java 中运行,那么将标识父 JVMSERVER。 正在运行任务的 Java 线程所在的 Java 线程,将对该线程发出 Thread.stop() 。 如果成功,那么将返回 ThreadDeath 错误并终止 Java 线程。
注:PURGE 保护的任务需要发出 FORCEPURGE
重要信息: 如果任务正在运行不产生的循环,那么即使 Java TASK KILL 命令也可能无效。 在紧密的非生成循环中停止 Java 任务的唯一方法是升级到 JVMSERVER DISABLE KILL