Sweeping_Monk 2014-08-10 01:02
浏览 221
已采纳

关于Java ThreadLocal的疑问

ThreadLocal作为一个可以将数据进行线程隔离的解决方法,其本质还是将数据存放在各个线程对象中(数据存放在Thread的ThreadLocalMap threadLocals中);

那么为什么JDK不在设计的时候就使Thread对象具有保存线程上下文的能力呢?
比如可以这样:
[code="java"]public class Thread
{
...
private Map contexts = new WeakHashMap();
public void setContext(Object key, Object value)
{
contexts.put(key, value);
}
public void getContext(Object key)
{
contexts.get(key);
}
}[/code]
使用的时候Thread.getCurrentThread.getContext(key);简单方便

JDK实现者是出于什么考虑才这样设计的?

  • 写回答

4条回答

  • renminzdb2 2014-08-11 14:55
    关注

    楼主你真的很搞笑,你这样就违背了数据的封装原则。Thread作为类,为什么要提别人保存属性啊 就好比一个people类,存放很多别人的名字一样 。首先threadlocal是一个类,但是他的使用原则,是有多个线程共同工作在一个环境下,如果乜有threadlocal类,那么在实际的编码中,我们很喜欢调用一个帮助类,来辅助解决这个问题的。如ThreadHelper之类的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多