您的位置:首页 > 其它

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

2017-09-27 00:00 218 查看
情景:

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

结论:

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

验证代码:

package com.vhs.ma;

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

/**
* @author JasonBai
*/
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
相关文章推荐