一尘不染

如何增强tomcat的线程池行为

tomcat

我正在使用tomcat7运行Java应用程序。我需要为每个tomcat线程存储信息,因此可以使用ThreadLocals方法。

在我的server.xml中,线程池定义如下所示:

 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
    maxThreads="10000" minSpareThreads="2000"/>

我有一个类EnhanceThread

public class EnhanceThread extends Thread {
    ...
    @Override
    public void run() {
       SomeThreadLocals.set(data);
       super.run();
     }
}

如何覆盖tomcat线程池定义并使其使用我的类?有没有更好的方法来威胁这个问题?


阅读 265

收藏
2020-06-16

共1个答案

一尘不染

您无需为此而烦恼Tomcat线程。只需使用以下代码:

public class JsonSerializerFactory {
    private static final ThreadLocal<JsonSerializer> JSON_SERIALIZER = 
        new ThreadLocal<JsonSerializer>() {
            @Override 
            protected JsonSerializer initialValue() {
                 return new JsonSerializer();
            }
        };

    public static JsonSerializer get() {
        return JSON_SERIALIZER;
    }
}

每次您需要序列化器时,请调用JsonSerializerFactory.get(),它将返回线程本地实例,如果尚不存在则懒惰地创建它。

2020-06-16