我正在使用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()
,它将返回线程本地实例,并且如果尚不存在则懒惰地创建它。