/* list集合线程安全 */ public class ThreadDemo4 { public static void main(String[] args) { //创建ArrayList集合 // List<String> list = new ArrayList<>(); //不安全 // List<String> list= new Vector<>(); //效率低 // List<String> list = Collections.synchronizedList(new ArrayList<>()); //不推荐使用 List<String> list = new CopyOnWriteArrayList<>(); //推荐使用(重点) for (int i = 0; i < 10; i++) { new Thread(()->{ //向集合中添加内容 list.add(UUID.randomUUID().toString().substring(0,8)); //从集合中获取内容 System.out.println(list); },String.valueOf(i)).start(); } } }
public class ThreadHashSet { public static void main(String[] args) { // Set<String> set = new HashSet<>(); //线程不安全 Set<String> set = new CopyOnWriteArraySet<>(); //线程安全 for (int i = 0; i < 10; i++) { new Thread(()->{ //向集合中添加内容 set.add(UUID.randomUUID().toString().substring(0, 8)); //从集合中获取内容 System.out.println(set); },String.valueOf(i)).start(); } } }
public class ThreadMap { public static void main(String[] args) { // Map<String, String> map = new HashMap<>(); //线程不安全 Map<String, String> map = new ConcurrentHashMap(); //线程安全 for (int i = 0; i < 10; i++) { String key = String.valueOf(i); new Thread(() -> { //向集合中添加内容 map.put(key, UUID.randomUUID().toString().substring(0, 8)); //从集合中获取内容 System.out.println(map); }, String.valueOf(i)).start(); } } }
1.线程安全与线程不安全集合
集合类型中存在线程安全与线程不安全的两种,常见例如:
ArrayList ----- Vector
HashMap -----HashTable
但是以上都是通过 synchronized 关键字实现,效率较低
2.Collections 构建的线程安全集合
3.java.util.concurrent 并发包下
CopyOnWriteArrayList CopyOnWriteArraySet 类型,通过动态数组与线程安全个方面保证线程安全