gpt4 book ai didi

java - 应用程序线程保持运行

转载 作者:行者123 更新时间:2023-12-01 04:52:44 25 4
gpt4 key购买 nike

我们使用 Websphere Work Manager (CommonJ) 在我们的应用程序中生成线程。我们正在使用默认的 WorkManager 并通过 JNDI 在我们的应用程序中访问它。

try {  
Context ctx = new InitialContext();
wm = (WorkManager) ctx.lookup("java:comp/env/wm/App_WORKMANAGER");
wm.schedule(this);
//threadScheduler = new Thread(this);
//threadScheduler.start();
} catch (Exception e) {
// catch the exception
}

我们继续运行监听不同队列的线程来检查任何消息并处理它。我们确实收到了如下挂起消息,了解到可以从管理控制台配置它以停止显示警告/错误或增加挂起检测时间。

[1/30/13 6:50:38:708 EST] 00000032 ThreadMonitor W WSVR0605W: Thread "WorkManager.DefaultWorkManager : 2" (00000022) has been active for 708969 milliseconds and may be hung. There is/are 1 thread(s) in total in the server that may be hung.

现在,如果我们从管理控制台停止应用程序,这些线程不会停止,并且我们会继续收到挂起消息。对于另一个部署,另一组线程加起来就等于挂起线程计数。我在某处读到,如果我们将线程声明为Daemon,那么它们就会停止()。那么我们可以将线程声明为 Daemon 吗?或者我们也需要重写 release() 方法?我们的 release() 现在是空的。

public boolean isDaemon() {                        
return true;
}

public void release() {
//TODO
}

一旦应用程序停止,我们到底如何才能停止应用程序线程的运行?这是一个使用 Struts 1.x 的旧应用程序。

我在这里读到了两个解释:

  1. Thread keeps running even after application has been stopped in Websphere (因为我没有使用 spring,所以只需声明 Deamon 就可以了?如果我们停止 JVM 本身,这将起作用,只是从控制台停止应用程序不会有帮助,对吗?)

    <
  2. Does Websphere respect Daemon threads? (Sarel Botha 建议的方法是唯一的解决方案,或者我们可以从控制台进行一些设置来完成工作。)

谢谢。

最佳答案

是的,在您的用例中,isDaemon 方法应返回 true,并且您需要以这样的方式实现 release 方法:停止在 Work 对象的 run 方法中执行的代码。如果您这样做,则挂起线程警告将消失,并且当应用程序停止时,WebSphere 将在所有正在运行的 Work 对象上调用 release

关于java - 应用程序线程保持运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14683244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com