java并发之CopyOnWriteArraySet

java并发之CopyOnWriteArraySet

CopyOnWriteArraySet是基于CopyOnWriteArrayList实现的,持有CopyOnWriteArrayList的内部对象,它的迭代器也是CopyOnWriteArrayList的迭代器,add操作通过addAllAbsent或者addIfAbsent去重。

例子

1package javalearn.javabase.concurrent; 2 3import lombok.extern.slf4j.Slf4j; 4 5import java.util.HashSet; 6import java.util.Iterator; 7import java.util.Set; 8import java.util.concurrent.CopyOnWriteArraySet; 9 10@Slf4j 11public class CopyOnWriteArraySetTest { 12 private static CopyOnWriteArraySet<String> set = new CopyOnWriteArraySet<>(); 13 14 private static int capcity = 5; 15 16 //private static HashSet<String> set =new HashSet<>(); 17 public static void main(String[] args) { 18 CopyOnWriteArraySetTest.InnerThread t1 = new InnerThread(); 19 CopyOnWriteArraySetTest.InnerThread t2 = new InnerThread(); 20 t1.start(); 21 t2.start(); 22 try { 23 Thread.sleep(1000); 24 log.info("collection:{} ",set.toString()); 25 26 } catch (InterruptedException e) { 27 e.printStackTrace(); 28 } 29 30 31 } 32 33 static class InnerThread extends Thread { 34 @Override 35 public void run() { 36 for (int i = 0; i < capcity; i++) { 37 set.add(String.valueOf(i)); 38 set.add(String.valueOf(i)); 39 iterator(set); 40 } 41 } 42 } 43 44 public static void iterator(Set set) { 45 Iterator iterator = set.iterator(); 46 while (iterator.hasNext()) { 47 iterator.next(); 48 } 49 50 } 51} 52

结果

21:10:09.967 [main] INFO javalearn.javabase.concurrent.CopyOnWriteArraySetTest - collection:[0, 1, 2, 3, 4]
点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java ConcurrentHashMap和CopyOnWriteArrayList解决并发问题

ConcurrentHashMap一、hashtable、hashmap、ConcurrentHashMap1、线程不安全的HashMap因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率

java并发程序和共享对象实用策略

java并发程序和共享对象实用策略在并发程序中使用和共享对象时,可以使用一些实用的策略,包括:1.线程封闭2.只读共享。共享的只读对象可以由多个线程并发访问,但任何线程都不能修改它。共享的只读对象包括不可变对象和事实不可变对象3.线程安全共享。线程安全地对象在器内部实现同步。4.保护对象。被保护的对象只能通过持有特定的锁

Java CopyOnWrite容器

   CopyOnWrite简称COW(写时复制),是一种程序设计中的优化策略,读取时,直接读取,写入时,copy一个副本,在这个副本上进行写入,写入完成,用副本替换原数据,这是一种延时懒惰策略。   从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,CopyOnWriteArrayList和CopyOnW

JAVA并发之加锁导致的活跃性问题

首先提及一下前置知识:1.JAVA并发之基础概念(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fmp.weixin.qq.com%2Fs%2Fb8aX2DAICYQ05i1DI8SAmA)2.JAVA并发之进程VS线程(https://www.oschina.n

Java 并发数据结构

\TOCM\因为Java提供了一些非线程安全的数据结构如HashMap,ArrayList,HashSet等。所有在多线程环境中需要使用支持并发访问操作的数据结构。并发ListVector,CopyOnWriteArrayList是线程安全的List。ArrayList是线程不安全的。如果一定要使用,需要:Collection