package constxiong.concurrency.a026;import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.concurrent.CopyOnWriteArrayList;/** * 测试 copy-on-write * @author ConstXiong */public class TestCopyOnWrite { private static final Random R = new Random();private static CopyOnWriteArrayList<Integer> cowList = new CopyOnWriteArrayList<Integer>();// private static ArrayList<Integer> cowList = new ArrayList<Integer>();public static void main(String[] args) throws InterruptedException { List<Thread> threadList = new ArrayList<Thread>(); //启动 1000 个线程,向 cowList 添加 5 个随机整数 for (int i = 0; i <1000; i++) { Thread t = new Thread(() -> { for (int j = 0; j <5; j++) { //休眠 10 毫秒,让线程同时向 cowList 添加整数,引出并发问题 try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } cowList.add(R.nextInt(100)); } }) ; t.start(); threadList.add(t); }for (Thread t : threadList) { t.join(); } System.out.println(cowList.size()); }}打印结果
5000如果把
private static CopyOnWriteArrayList<Integer> cowList = new CopyOnWriteArrayList<Integer>();改为
private static ArrayList<Integer> cowList = new ArrayList<Integer>();打印结果就是小于 5000 的整数了
【Java中有哪些无锁技术来解决并发问题?如何使用?】
推荐阅读
- 长角的动物有哪些? 世界上牛角最长的牛
- 史上最全 Java 中各种锁的介绍
- 肾病病人宜吃哪些食物
- 杭州灯具批发市场有哪些
- 清明节与寒食节有什么关系有哪些故事呢 寒食节与清明节的关系
- 门和木地板颜色搭配要注意哪些
- 男人心理不成熟的表现有哪些? 男人不成熟的表现
- 保养维修玻璃门的技巧有哪些
- Java异常处理只有Try-Catch吗?
- JavaScript原型详解