为什么set.add(v)是临界区

来源:2-5 ThreadLocal场景分析——减少同步

一个热爱篮球的程序猿

2020-02-14 11:51

set.add(v)每个线程只是初始化的时候才会调用,调用的时候,谁抢占到set这个变量,添加值的时候,不都是值等于0的这个对象v吗

写回答 关注

4回答

  • qq_Forever浅唱此生_0
    2020-04-13 10:33:36

    这个HashSet和HashMap的多线程调用时是一样的风险,在扩容时有可能导致死循环,所以要用同步的容器或者同步代码块去调用“添加”的方法

  • 慕侠小天
    2020-03-25 16:41:11

    我同意楼主的看法,加锁与否不影响该问题的结果。可能老师想表达的意思是,set作为临界资源,加锁更好,便于以后代码的修改吧。

  • 自有如风
    2020-02-27 16:38:04

    这里我测试不加锁1000个线程跑100000也是正常的

    http://img4.mukewang.com/5e577fd20001465906060330.jpg

    http://img3.mukewang.com/5e577fe80001a76804260234.jpg

  • 墨丞
    2020-02-14 19:47:04

    多个线程初始化的时候会可能会产生多个线程同时调用set.add(v);  对set有操作

ThreadLocal

设计者视角源码级ThreadLocal分析教你建立线程安全感-你专属的技术优越感

14065 学习 · 32 问题

查看课程

相似问题