【JUC】JDK1.8源码分析之CopyOnWriteArraySet(七)
2016-06-01 14:34
549 查看
一、前言
分析完了CopyOnWriteArrayList后,下面接着分析CopyOnWriteArraySet,CopyOnWriteArraySet与CopyOnWriteArrayList有莫大的联系,因为CopyOnWriteArraySet的底层是由CopyOnWriteArrayList提供支持,并且将对其的操作转发至对CopyOnWriteArrayList的操作。但是,CopyOnWriteArraySet的元素不允许重复,这是和CopyOnWriteArrayList不相同的地方,下面开始分析。
二、CopyOnWriteArraySet数据结构
由于CopyOnWriteArraySet底层是使用CopyOnWriteArrayList,所以其数据结构与CopyOnWriteArrayList相同,采用数组结构。其结构如下
View Code
运行结果(某一次)
说明:首先,主线程向CopyWriteArraySet也添加了元素,然后,PutThread线程向CopyOnWriteArraySet中添加元素(与之前添加了元素重复),两次迭代,遍历集合,发现结果相同,即CopyWriteArraySet中没有重复的元素。
五、总结
CopyOnWriteArraySet的源码比较简单,是依托CopyOnWriteArrayList而言,所以当分析完了CopyOnWriteArrayList后,CopyOnWriteArraySet的分析就非常简单,谢谢各位园友的观看~
分析完了CopyOnWriteArrayList后,下面接着分析CopyOnWriteArraySet,CopyOnWriteArraySet与CopyOnWriteArrayList有莫大的联系,因为CopyOnWriteArraySet的底层是由CopyOnWriteArrayList提供支持,并且将对其的操作转发至对CopyOnWriteArrayList的操作。但是,CopyOnWriteArraySet的元素不允许重复,这是和CopyOnWriteArrayList不相同的地方,下面开始分析。
二、CopyOnWriteArraySet数据结构
由于CopyOnWriteArraySet底层是使用CopyOnWriteArrayList,所以其数据结构与CopyOnWriteArrayList相同,采用数组结构。其结构如下
package com.hust.grid.leesf.collections; import java.util.Iterator; import java.util.concurrent.CopyOnWriteArraySet; class PutThread extends Thread { private CopyOnWriteArraySet<Integer> cowas; public PutThread(CopyOnWriteArraySet<Integer> cowas) { this.cowas = cowas; } public void run() { for (int i = 0; i < 10; i++) { cowas.add(i); } } } public class CopyOnWriteArraySetDemo { public static void main(String[] args) { CopyOnWriteArraySet<Integer> cowas = new CopyOnWriteArraySet<Integer>(); for (int i = 0; i < 10; i++) { cowas.add(i); } PutThread p1 = new PutThread(cowas); p1.start(); Iterator<Integer> iterator = cowas.iterator(); while (iterator.hasNext()) { System.out.print(iterator.next() + " "); } System.out.println(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } iterator = cowas.iterator(); while (iterator.hasNext()) { System.out.print(iterator.next() + " "); } } }
View Code
运行结果(某一次)
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
说明:首先,主线程向CopyWriteArraySet也添加了元素,然后,PutThread线程向CopyOnWriteArraySet中添加元素(与之前添加了元素重复),两次迭代,遍历集合,发现结果相同,即CopyWriteArraySet中没有重复的元素。
五、总结
CopyOnWriteArraySet的源码比较简单,是依托CopyOnWriteArrayList而言,所以当分析完了CopyOnWriteArrayList后,CopyOnWriteArraySet的分析就非常简单,谢谢各位园友的观看~
相关文章推荐
- java的继承关系中,构造方法调用问题
- Collection & Collections Part 1/2: Collection
- 杭电1113(Java实现)
- SpringMVC 获得应用的绝对路径
- java String 字符串只保留汉字
- java数组和集合复习
- Servlet - 会话跟踪
- Java提高班--注解
- Java集合类框架—Set、HashSet、TreeSet
- dubbo spring2.5.6与spring 3冲突解决
- Struts2---简介
- java设计模式
- Eclipse安装后jdk和tomacat与以前项目不匹配解决办法
- Spring IOC源码详解之容器初始化
- Java正则表达式
- Spring(一)
- JavaSE_多线程下载
- JavaBean创建和使用:计算器
- java.util.Arrays类
- Java文件下载及文件名乱码问题