我有一个在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 中通过仅知道线程名来检查线程是否处于活动状态?
非常感谢
答案 0 :(得分:0)
您应该使用ThreadLocal
。如果线程死亡,ThreadLocal将自动清理,因为它是Thread的类变量。
您可以枚举JVM中的所有线程,但它有一个代码&#39;气味&#39;如果你必须为你的程序的正常功能做到这一点,请告诉我。