我已经阅读了关于 ThreadLocal 及其使用的 SO 线程的有趣讨论。
- 我应该何时以及如何使用 ThreadLocal 变量?
- ThreadLocal 的目的?
- ThreadLocal 的使用如何降低可重用性
- 可以使用 ThreadLocal 来存储请求的 Locale 吗?
这个问题更倾向于设计时的选择。我的场景是这样的
如果我在 Web 应用程序中有一个值对象,几乎所有步骤都可能需要在同一线程中使用它。我可以想到两个界面设计选项,如下所示
方法 #1使用方法参数传递。
到目前为止,我一直专注于提出一个接口,该接口可以具有带有值对象接口参数的方法。
例如:
public interface SomeDataProcessorInterface {
public void processSomething(SomeValueObjectInterface vo);
}
public interface SomeValueObjectInterface extends Serializable {}
方法#2使用 ThreadLocal
在这种方法中,我可以有一个没有方法参数的接口,只需创建一个静态类来使用线程本地访问我的值对象。
例如:
public interface SomeDataProcessorInterface {
public void processSomething();
}
public interface SomeValueObjectInterface extends Serializable {}
public Class StaticClass {
private static ThreadLocal<SomeValueObjectInterface> threadLocalVO = new ThreadLocal<SomeValueObjectInterface>();
public static ThreadLocal getThreadLocal() {
return threadLocal;
}
哪种方法更好?为什么?
这些实现中的哪一个将有更少的内存泄漏机会?
这些实现中的哪一个对 Java 垃圾收集器有好处?
我阅读了其他线程中的一些要点,但是如果我从头开始,我仍然不清楚哪种方法更好。