sof*_*dia 6 java interface thread-local
我已经阅读了有关 ThreadLocal 及其使用的以下 SO 线程的有趣讨论。
这个问题更倾向于设计时选择。我的场景是这样的
如果我在 Web 应用程序中有一个值对象,几乎所有步骤都可能需要在同一个线程中使用它。我可以想到两个界面设计选项,如下所示
方法#1使用方法参数传递。
到目前为止,我一直专注于提出一个接口,该接口可以具有带有值对象接口参数的方法。
例如:
public interface SomeDataProcessorInterface {
public void processSomething(SomeValueObjectInterface vo);
}
public interface SomeValueObjectInterface extends Serializable {}
Run Code Online (Sandbox Code Playgroud)
方法 #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;
}
Run Code Online (Sandbox Code Playgroud)
哪种方法更好?为什么?
这些实现中的哪一个实现内存泄漏的可能性较小?
这些实现中的哪一个对 Java 垃圾收集器有好处?
我通读了其他线程中的一些要点,但是如果我从头开始,我仍然不清楚哪种方法更好。
使用static TheadLocals 时,如果您忘记删除该元素,则可能会面临内存泄漏的风险。您始终可以通过在从方法返回之前删除该元素来避免这种情况。我不会推荐这种方法。
按照目前的情况,您的第一种方法已经是线程安全的,因为参数仅对于该方法调用是本地的。用这个吧。
| 归档时间: |
|
| 查看次数: |
2797 次 |
| 最近记录: |