为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

4 回答

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

1 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

http://img1.sycdn.imooc.com//5e577fd20001465906060330.jpg

http://img1.sycdn.imooc.com//5e577fe80001a76804260234.jpg

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信