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