多线程使用for循环遍历同一个Set,是否线程安全?
2017-09-27 00:00
218 查看
情景:
有一个线程外部的set集合(值保持不变),有多个线程同时遍历它,要求每个线程使用for循环的方式,且要可以遍历到set的全部值。
结论:
每个线程都会遍历到set集合的全部值,所以这种情况是线程安全的。
验证代码:
输出:
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集合(值保持不变),有多个线程同时遍历它,要求每个线程使用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
相关文章推荐
- Java关于集合(list,set,map)的遍历与增强for循环的使用
- Java8使用lambda表达式写的一个List,Set,Map遍历工具类
- 多线程中使用静态方法是否有线程安全问题
- 在多线程中使用静态方法是否有线程安全问题
- 在多线程中使用静态方法是否有线程安全问题
- 写出3种遍历一个list的方法,(使用for循环)
- 定时器与多线程 SetTimer and Multi-Thread 每个线程独立使用一个定时器
- 在多线程中使用静态方法是否有线程安全问题
- JavaScript基础 使用for循环遍历数组 并 查询 数组中是否存在指定的值
- 写出3种遍历一个list的方法,(使用for循环)
- 在多线程中使用静态方法是否有线程安全问题
- 在多线程中使用静态方法是否有线程安全问题
- 在 Java 的多线程中,如何去判断给定的一个类是否是线程安全的(另外:synchronized 同步是否就一定能保证该类是线程安全的。)
- JavaScript基础 使用for循环遍历数组 并 查询 数组中是否存在指定的值
- 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)
- 使用for循环写出3种遍历一个list的方法
- 在 Java 的多线程中,如何去判断给定的一个类是否是线程安全的(另外:synchronized 同步是否就一定能保证该类是线程安全的。)
- java关于集合(list,set,map)的遍历与增强for循环的使用
- 在多线程中使用静态方法是否有线程安全问题
- 定时器与多线程 SetTimer and Multi-Thread 每个线程独立使用一个定时器