一个热爱篮球的程序猿
2020-02-14 11:51
set.add(v)每个线程只是初始化的时候才会调用,调用的时候,谁抢占到set这个变量,添加值的时候,不都是值等于0的这个对象v吗
这个HashSet和HashMap的多线程调用时是一样的风险,在扩容时有可能导致死循环,所以要用同步的容器或者同步代码块去调用“添加”的方法
我同意楼主的看法,加锁与否不影响该问题的结果。可能老师想表达的意思是,set作为临界资源,加锁更好,便于以后代码的修改吧。
这里我测试不加锁1000个线程跑100000也是正常的
多个线程初始化的时候会可能会产生多个线程同时调用set.add(v); 对set有操作
ThreadLocal
14065 学习 · 32 问题
相似问题