java线程之List集合并发安全问题及解决方案

一、问题代码

任务:执行10轮次,使用多线程,给list集合添加元素,查看每次执行的结果。

public static void main(String[] args) throws InterruptedException {
        int loop = 0;
        int threadNum = 10;
        while (loop < 10) {
            //创建一个计数器
            CountDownLatch countDownLatch = new CountDownLatch(threadNum);
            //创建集合
            List<String> list = new ArrayList<>();
            for (int i = 0; i < threadNum; i++) {
                new Thread(() -> {
                    //集合添加内容
                    list.add(UUID.randomUUID().toString().substring(0, 8));
                    //线程操作完成一个减一
                    countDownLatch.countDown();
                }, String.valueOf(i)).start();
            }
            //等待所有线程执行完成
            countDownLatch.await();
            System.out.println("---集合长度:" + list.size() + "---loop:" + loop + "---");
            System.out.println(list);
            loop++;
        }
    }

loop:6时候,只添加了9条。

---集合长度:10---loop:0---
[955419b4, cd30b81c, 8bee554b, ff91be9b, 841408f7, 8a132002, 4384a15c, df8c561e, 4897166a, 80714bf0]
---集合长度:10---loop:1---
[d29700a9, f512d3d8, c9bc5faf, 749e0e91, 25dc21d5, 570b7473, 49161838, a2c28a34, 8e138a7c, 77d887cb]
---集合长度:10---loop:2---
[1e9ca70b, a07560ad, cb4c76ba, b2d1893c, 45e0f262, 68e25ac2, 09d2fe4f, 281765b4, 9877edc4, 284b852c]
---集合长度:10---loop:3---
[b17ba08f, 68f289dc, 47182e97, 7bdb5210, 7917e4fe, 04a0b440, b733d289, e137c32b, 4e5c920c, 10a9acdb]
---集合长度:10---loop:4---
[6bd8be8e, e07b569f, e8b37d23, c724a1f4, 2fa0b4fa, a0359dd5, 441dec81, 47f55116, 7642ab44, 4619b854]
---集合长度:10---loop:5---
[345dbd60, cac7fbb0, 4e54acb8, 6f6a4a82, 941579a3, 9f7242db, 4c1aa6ee, 81eb7196, faa589b9, e35f2f3b]
---集合长度:9---loop:6---
[5fcaa369, a0ced8b5, a05d0c74, 8415e2d9, 72ab401b, 809fd7a0, 51442894, 52bcf2a3, d477d1c3]
---集合长度:10---loop:7---
[85c82ca3, 074e8881, fb798fb4, 99a9fabe, ec4b6b5a, 964f0b63, 87aa845e, bab5e35b, f40bc936, dc284c89]
---集合长度:10---loop:8---
[98e6c1f2, 37a4370b, 6b7360af, a51b0051, 6322a817, 055b62d2, 78201d93, bee8e60d, 537ac6c7, 876b8428]
---集合长度:10---loop:9---
[e706c947, cc068
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值