多线程

dongbala123 2016-11-17 07:26:14
public class ThreadLocalTest {
private static ThreadLocal<Integer> value = new ThreadLocal<Integer>(){

@Override
protected Integer initialValue() {
return 1;
}
};

private static int testnum = 1;

static class Mythrad implements Runnable{

public void run() {
int num = value.get();
int tem = (int)(Math.random()*10);
System.out.println(Thread.currentThread().getName()+"---random num==="+tem);//1
testnum += tem;
//2
value.set(num+tem);

System.out.println(Thread.currentThread().getName()+"----"+tem+"-------"+value.get()+">>><<<<"+testnum);
}

}

public static void main(String[] args) {
Thread t1 = new Thread(new Mythrad());
Thread t2 = new Thread(new Mythrad());
t1.start();
t2.start();
}

}

就是注释1那句话放到注释2后结果相当不同。
在注释1时testnum总是2个线程随机值累加的,在注视2的时候总是某个线程的随机值相加的结果
...全文
347 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
NewshiJ 2016-11-29
  • 打赏
  • 举报
回复
楼主是不了解ThreadLocal这个类是吗 这是一个类似于map的数据集合,value就是你存入的值,key就是当前的线程,没次取和存入都是在当前线程范围内的不会让其他线程影响到数据 所以在第二个打印的时候就一直是当前线程的数据
bluetata 2016-11-21
  • 打赏
  • 举报
回复
没有看到注释1 而且 @Override部分所在的类没有extends其他类,有了该注解会出编译错误 楼主更正下source吧
自由自在_Yu 2016-11-18
  • 打赏
  • 举报
回复
没看到注释1

62,620

社区成员

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

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