java并发之CopyOnWirteArrayList
java并发之CopyOnWirteArrayList
CopyOnWirteArrayList的实现
它用了ReentrantLock保证了add,set,remove操作的安全,同时使用volatile定义内部数组保证了可见性,
之所以叫CopyOnWrite就是因为很多方法都是通过Array.copy或者System.arraycopy,操作中有数组的
拷贝,所以写的操作效率很低
例子
package javalearn.javabase.concurrent;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@Slf4j
public class CopyWriteOnArrayListTest {
    private static int capcity = 5;
    private static List<String> list = new CopyOnWriteArrayList<String>();
    //private static List<String> list = new ArrayList<>();会抛出异常ConcurrentModificationException
    public static void main(String[] args) {
        InnerThread t1 = new InnerThread();
        InnerThread t2 =new InnerThread();
        t1.start();
        t2.start();
    }
    static class InnerThread extends Thread {
        @Override
        public void run() {
            for (int i = 0; i < capcity; i++) {
                list.add(String.valueOf(i));
                iteratorList(list);
            }
        }
    }
    public static void iteratorList(List list){
        Iterator iterator =list.iterator();
        while(iterator.hasNext()){
            iterator.next();
        }
    }
}
java并发之CopyOnWirteArrayList的更多相关文章
- java并发之固定对象与实例
		java并发之固定对象与实例 Immutable Objects An object is considered immutable if its state cannot change after ... 
- Java并发之BlockingQueue的使用
		Java并发之BlockingQueue的使用 一.简介 前段时间看到有些朋友在网上发了一道面试题,题目的大意就是:有两个线程A,B, A线程每200ms就生成一个[0,100]之间的随机数, B线 ... 
- 深入理解Java并发之synchronized实现原理
		深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoader) 深入 ... 
- Java并发之Semaphore的使用
		Java并发之Semaphore的使用 一.简介 今天突然发现,看着自己喜欢的球队发挥如此的棒,然后写着博客,这种感觉很爽.现在是半场时间,就趁着这个时间的空隙,说说Java并发包中另外一个重量级的类 ... 
- Java并发之CyclicBarria的使用(二)
		Java并发之CyclicBarria的使用(二) 一.简介 之前借助于其他大神写过一篇关于CyclicBarria用法的博文,但是内心总是感觉丝丝的愧疚,因为笔者喜欢原创,而不喜欢去转载一些其他的文 ... 
- Java并发之CyclicBarria的使用
		Java并发之CyclicBarria的使用 一.简介 笔者在写CountDownLatch这个类的时候,看到了博客园上的<浅析Java中CountDownLatch用法>这篇博文,为博主 ... 
- Java并发之CountDownLatch的使用
		Java并发之CountDownLatch的使用 一. 简介 Java的并发包早在JDK5这个版本中就已经推出,而且Java的并发编程是几乎每个Java程序员都无法绕开的屏障.笔者今晚在家闲来无事,翻 ... 
- java并发之hashmap源码
		在上篇博客中分析了hashmap的用法,详情查看java并发之hashmap 本篇博客重点分析下hashmap的源码(基于JDK1.8) 一.成员变量 HashMap有以下主要的成员变量 /** * ... 
- Java并发之synchronized
		Java多线程同步关键词是常用的多线程同步手段.它可以修饰静态类方法,实例方法,或代码块.修饰static静态方法时是对整个类加锁. 一.实现原理 在JVM中对象内存分三块区域,对象头.实例数据.对齐 ... 
随机推荐
- 制作手风琴效果时发现新大陆,好吧,其实是一个bug
			手风琴效果代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ... 
- 【STM32H7教程】第57章  STM32H7硬件JPEG编解码基础知识和HAL库API
			完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第57章 STM32H7硬件JPEG编解码基础知识 ... 
- 顾家办公两不误,容智ibot帮你实现高效居家办公
			春节假期结束,大部分企业已陆续开始复工.经调查显示,受新型冠状病毒疫情影响,不少企业开放了员工“在家办公“模式,就此,员工被动“SOHO”,在家办公火了. 2020 在家办公靠谱吗?会不会成为未来的趋 ... 
- Java JDBC 数据库链接小结随笔
			Java JDBC 数据库链接小结随笔 一.链接数据库的步骤 二.关于Statement 和 PrepareStatement 两者区别 用法 三.关于 ResultSet 的一些小结 四.自定义 ... 
- 带有“全选”的combotree
			<div id="setBtn_dd" class="easyui-window" data-options="iconCls:'icon-sa ... 
- django 中url与path小记
			1. 在django 2.0中增加了一些新的特性 更简单的URL路由语法 (Simplified URL routing syntax) admin应用的针对移动设备的优化改进(Mobile-frie ... 
- 关于null和空指针异常
			1,null是一个标识符,用来表示不确定的对象,可以将null赋给引用类型变量,但不可以将null赋给基本类型变量 2,null本身不是对象,也不是object的实例,也不知道是什么类型 3,对于集合 ... 
- java获取当前机器的公网ip
			package com.Interface.util; import javax.servlet.http.HttpServletRequest; /** * 测试类 * * @author 华文 * ... 
- MAC系统 -java开发环境搭建
			MAC - java开发环境搭建 软件: jdk Intellij IDEA:java开发工具 maven:jar包管理 git :源码管理 sourceTree :源码管理GUI客户端 Studio ... 
- 【剑指Offer面试编程题】题目1509:树中两个结点的最低公共祖先--九度OJ
			题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ... 
