A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 莫嘉伟 中级黑马   /  2013-3-1 16:54  /  1128 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

     ThreadLocal类修饰的变量会成为局部线程,每个线程访问该变量时会有一个自已的副本,不同的线程的该对象互不影响,我想问的是那ThreadLocal类对解决线程同步这个问题有帮助吗,比如基础测试中的做饭问题,如果盐用ThreadLocal修饰了,那儿子修改过的盐对像是不是对妈妈一点用都没有了?

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个

查看全部评分

1 个回复

倒序浏览
ThreadLocal不是用来解决对象共享访问问题的,而主要是提供了保持对象的方法和避免参数传递的方便的对象访问方式。归纳了两点:
1。每个线程中都有一个自己的ThreadLocalMap类对象,可以将线程自己的对象保持到其中,各管各的,线程可以正确的访问到自己的对象。
2。将一个共用的ThreadLocal静态实例作为key,将不同对象的引用保存到不同线程的ThreadLocalMap中,然后在线程执行的各处通过这个静态ThreadLocal实例的get()方法取得自己线程保存的那个对象,避免了将这个对象作为参数传递的麻烦。


当然如果要把本来线程共享的对象通过ThreadLocal.set()放到线程中也可以,可以实现避免参数传递的访问方式,但是要注意get()到的是那同一个共享对象,并发访问问题要靠其他手段来解决。但一般来说线程共享的对象通过设置为某类的静态变量就可以实现方便的访问了,似乎没必要放到线程中。

ThreadLocal的应用场合,我觉得最适合的是按线程多实例(每个线程对应一个实例)的对象的访问,并且这个对象很多地方都要用到。

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马