您的位置:首页 > 编程语言 > Java开发

【JUC】JDK1.8源码分析之CopyOnWriteArraySet(七)

2016-06-01 14:34 549 查看
一、前言

  分析完了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的分析就非常简单,谢谢各位园友的观看~

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: