我正在使用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线程池定义并使其使用我的类?
有没有更好的方法来威胁这个问题?

最佳答案

您无需为此而烦恼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(),它将返回线程本地实例,并且如果尚不存在则懒惰地创建它。

09-26 21:26