如果我知道线程名称,如何检查tomcat中的线程是否仍然存活?

时间:2014-09-09 10:27:08

标签: java multithreading tomcat

我有一个在tomcat上运行的应用程序,我有一个static池(HashMap),每次在tomcat中创建一个线程时,我都会存储一个对象请求,我将在线程终止时从HashMap删除条目。只是为了清楚说明这是我正在做的一个简单的例子。

这是我的游泳池

public class CustomerPool{

    public static Map<String, Customer> customerPool = new HashMap<String, Customer>();

    public static void createSession() {
        String threadName = Thread.currentThread().getName();
        Customer c = new Customer();
        customerPool.put(threadName, customer);
    }

    public static void terminateSession(){
        String threadName = Thread.currentThread().getName();
        customerPool.remove(threadName);
    }
}

我的servlet

public class CustomerServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
        CustomerPool.createSession();

        //the rest of my code

        CustomerPool.terminateSession();
        return;
    }
}

由于我收到的一些例外(特定于我的应用程序而没有列出它们),我相信有时条目不会从池中删除。

我想生成一个池的报告,它将显示当前有多少条目进入池中,以及哪些条目不存在。是否可以在 Java 中通过仅知道线程名来检查线程是否处于活动状态?

非常感谢

1 个答案:

答案 0 :(得分:0)

您应该使用ThreadLocal。如果线程死亡,ThreadLocal将自动清理,因为它是Thread的类变量。

您可以枚举JVM中的所有线程,但它有一个代码&#39;气味&#39;如果你必须为你的程序的正常功能做到这一点,请告诉我。