Java有线程安全的set吗?,跳槽薪资翻倍

知乎热问:国家何时整治程序员的高薪现象?太可怕了!

注解+反射优雅的实现Excel导入导出(通用版)

Fluent Mybatis 牛逼!

Nginx 常用配置清单

这玩意比ThreadLocal叼多了,吓得我赶紧分享出来。

来源:blog.csdn.net/li_canhui/article/details/91393247

在多线程环境下,要使用线程安全的集合,比如,ConcurrentHashMap是线程安全的HashMap,CopyOnWriteArrayList是线程安全的ArrayList。那么HashSet对应的线程安全集合,是什么呢?java有没有提供默认实现呢?

在java的concurrent包中,我找到了CopyOnWriteArraySet,那么它是线程安全的吗?下面是测试代码。

public static void main(String[] args) {

Set set = new CopyOnWriteArraySet<>();

ExecutorService service = Executors.newFixedThreadPool(12);

int times = 10000;

AtomicInteger flag = new AtomicInteger(0);

for(int i = 0; i < times; i ++){

service.execute(()->{

set.add(“a” + flag.getAndAdd(1));

});

}

service.shutdown();

try {

service.awaitTermination(Long.MAX_VALUE, Tim 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 eUnit.DAYS);

}catch (Exception e){

e.printStackTrace();

}

System.out.println(set.size());

}

经过多次执行,结果都是10000。可以说明,CopyOnWriteArraySet是线程安全的Set。

那么CopyOnWriteArraySet是如何保证写入时的线程安全呢?以下是CopyOnWriteArraySet的add源码。

public boolean add(E e) {

return al.addIfAbsent(e);

}

public boolean addIfAbsent(E e) {

Object[] snapshot = getArray();

return indexOf(e, snapshot, 0, snapshot.length) >= 0 ? false :

addIfAbsent(e, snapshot); Java开源项目【ali1024.coding.net/public/P7/Java/git】

}

private static int indexOf(Object o, Object[] elements,

总结

机会是留给有准备的人,大家在求职之前应该要明确自己的态度,熟悉求职流程,做好充分的准备,把一些可预见的事情做好。

对于应届毕业生来说,校招更适合你们,因为绝大部分都不会有工作经验,企业也不会有工作经验的需求。同时,你也不需要伪造高大上的实战经验,以此让自己的简历能够脱颖而出,反倒会让面试官有所怀疑。

你在大学时期应该明确自己的发展方向,如果你在大一就确定你以后想成为Java工程师,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实Java基础。下图涵盖了应届生乃至转行过来的小白要学习的Java内容:

请转发本文支持一下

行过来的小白要学习的Java内容:

请转发本文支持一下

[外链图片转存中…(img-HDOt6CFG-1650618334939)]

[外链图片转存中…(img-pXcn9czk-1650618334941)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值