关于多线程本地变量 ThreadLocal的问题

Jeson_y 2016-10-28 12:21:36
我想问一下,如果我想在线程创建的时候赋值给本地变量,怎么弄呢?
DoAccessing newThread = new DoAccessing();
ThreadLocal<List<AccessVo>> threadLocal = new ThreadLocal<List<AccessVo>>();
threadLocal.set(vos);
newThread.setAssess(threadLocal);
Thread t = new Thread(newThread);
t.setName(threadName);
t.start();

这样可以吗?我希望newThread这个对象单独使用这个变量,而不是共享给其他线程。
...全文
356 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jeson_y 2016-10-31
  • 打赏
  • 举报
回复
引用 6 楼 hemowolf 的回复:
[quote=引用 2 楼 Jeson_y 的回复:] [quote=引用 1 楼 hemowolf 的回复:] ThreadLocal 是在子线程自己运行时进行设置的,不是在主线程设置
自己编写的线程类 启动后不都是子线程么?[/quote] 你要在你自己的线程里调用 ThreadLocal.set/get 才有效,它才是和你的线程关联的对象[/quote] 谢谢!知道了,不过我现在不用本地变量了直接声明全局变量,一样可以用,而且 我如果要修改变量的值,直接中断这个线程,重新启动一个就行了
小灰狼 2016-10-28
  • 打赏
  • 举报
回复
引用 2 楼 Jeson_y 的回复:
[quote=引用 1 楼 hemowolf 的回复:] ThreadLocal 是在子线程自己运行时进行设置的,不是在主线程设置
自己编写的线程类 启动后不都是子线程么?[/quote] 你要在你自己的线程里调用 ThreadLocal.set/get 才有效,它才是和你的线程关联的对象
xjsglg 2016-10-28
  • 打赏
  • 举报
回复
这样不行的,在DoAccessing 类定义threadlocal,并且定义为static的。这样变量值就只对当前线程或其子线程使用,当线程结束,则该值就会被清理
percy_px 2016-10-28
  • 打赏
  • 举报
回复
解决子线程共享变量, ThreadLocal为每个子线程建立该子线程的副本,高并发下,数据不会有影响。
woshimike 2016-10-28
  • 打赏
  • 举报
回复
ThreadLocal 是把主线程的变量 复制一副到本地来用,这些变量的作用域 就只局限于子线程。
Jeson_y 2016-10-28
  • 打赏
  • 举报
回复
引用 1 楼 hemowolf 的回复:
ThreadLocal 是在子线程自己运行时进行设置的,不是在主线程设置
自己编写的线程类 启动后不都是子线程么?
小灰狼 2016-10-28
  • 打赏
  • 举报
回复
ThreadLocal 是在子线程自己运行时进行设置的,不是在主线程设置

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧