课程
/后端开发
/Java
/ThreadLocal
set.add(v)每个线程只是初始化的时候才会调用,调用的时候,谁抢占到set这个变量,添加值的时候,不都是值等于0的这个对象v吗
2020-02-14
源自:ThreadLocal 2-5
正在回答
这个HashSet和HashMap的多线程调用时是一样的风险,在扩容时有可能导致死循环,所以要用同步的容器或者同步代码块去调用“添加”的方法
我同意楼主的看法,加锁与否不影响该问题的结果。可能老师想表达的意思是,set作为临界资源,加锁更好,便于以后代码的修改吧。
这里我测试不加锁1000个线程跑100000也是正常的
多个线程初始化的时候会可能会产生多个线程同时调用set.add(v); 对set有操作
举报
设计者视角源码级ThreadLocal分析教你建立线程安全感-你专属的技术优越感
1 回答请问addSet这个临界区代码不加锁会出现什么问题那
2 回答将v值设置为0,又放到set中去,那么set中的值不都是0?
3 回答Integer为什么不是引用类型呢?
2 回答为什么threadLocalMap要设计为Static的双层map,如果设计为非静态的单层map有什么问题?
1 回答请问存this是什么意思呢?