搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > Java高级交流 > 多线程使用for循环遍历同一个Set,是否线程安全?

多线程使用for循环遍历同一个Set,是否线程安全?

Java高级交流 2018-05-14
举报

情景:

        有一个线程外部的set集合(值保持不变),有多个线程同时遍历它,要求每个线程使用for循环的方式,且要可以遍历到set的全部值。

验证代码:

package com.vhs.ma;


import java.util.HashSet;

import java.util.Random;

import java.util.Set;


public class ThreadTest {


    public final static Set<Integer> nums = new HashSet();

    public static int count = 0;


    public static void main(String[] args) {

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

            nums.add(i);

        }

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

            new SetThread().start();

        }


        while (true) {

            try {

                Thread.sleep(1000);

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

            if (count > 9)

                break;

        }



    }


}


class SetThread extends Thread {


    @Override

    public void run() {


        for (Integer s : ThreadTest.nums) {

            try {

                Thread.sleep(1000 * new Random().nextInt(5));

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

            System.out.println(Thread.currentThread() + "====" + s);

        }

        ThreadTest.count++;

    }

}



输出:

Thread[Thread-8,5,main]====0
Thread[Thread-5,5,main]====0
Thread[Thread-4,5,main]====0
Thread[Thread-8,5,main]====1
Thread[Thread-8,5,main]====2
Thread[Thread-1,5,main]====0
Thread[Thread-6,5,main]====0
Thread[Thread-3,5,main]====0
Thread……
Thread[Thread-2,5,main]====9

结论:

        每个线程都会遍历到set集合的全部值,所以这种情况是线程安全的。

-END-

JAVA高级技术 | 数据结构与算法 | JVM | 并发 | 数据库 | 各种开源框架


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《多线程使用for循环遍历同一个Set,是否线程安全?》的版权归原作者「Java高级交流」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

举报