gpt4 book ai didi

java - 如何检查我的线程是否正在运行 Java

转载 作者:行者123 更新时间:2023-12-02 06:47:18 29 4
gpt4 key购买 nike

我编写了一个简单的 JSF 2.0 Web 应用程序,它收集数据,将其存储在 ArrayList 中,然后生成一个 JSON 文件。这个过程每n秒执行一次。我的网络应用程序有一个按钮来启动和停止此过程。为此,我创建了一个守护线程。问题是我假设第一次启动时守护进程没有启动。我想做的是每次启动 web 应用程序时检查我的守护线程是否正在运行。这样,如果我离开我的网络应用程序并返回,它会正确地为我提供启动或停止选项。我用谷歌搜索了一下,但没能找到解决方案。

有没有办法检查特定线程当前是否正在 JVM 中运行?

最佳答案

你的线程类

 public class MyDaemon implements Runnable {
private volatile boolean running = false;

public void setRunning(boolean isRunning){
this.running = isRunning;
}

public boolean isRunning(){
return running ;
}

public void run(){
**running = true;**
while(running){
// your code here
}

}
}

线程异常处理程序将在发生异常时重置变量

 public class ThreadExceptionHandler implements Thread.UncaughtExceptionHandler {
private Thread thread;

private Throwable exception;

public void uncaughtException(Thread t, Throwable e) {
thread = t;
exception = e;
thread.setRunning(false);
}
}

您的 Start/Stop 方法将从 ServletContext 获取变量并检查 isRunning 方法。然后使用setRunning()方法。

已编辑

你的代码应该是

Thread dt = (Thread)this.getServletContext().getAttribute("myDaemon");
if(dt != null){
if (dt.isRunning()){
// Running so you can only check STOP command
if (yourCommand == 'STOP'){
dt.setRunning(false);
}
}
else {
// Not Running so check START command
if (yourCommand == 'START'){
dt.start();
}
}
}
else{
// First time
// create exception handler for threads
ThreadExceptionHandler threadExceptionHandler = new ThreadExceptionHandler();
// start Daemon thread
Thread dThread = new Thread(new MyDaemon (), "Daemon");
dThread.setUncaughtExceptionHandler(threadExceptionHandler);
dThread.setDaemon(true);
dThread.start();
// now save this dThread so servlet context
this.getServletContext().setAttribute("myDaemon", dThread);
}

我希望这会有所帮助。

关于java - 如何检查我的线程是否正在运行 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18495489/

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