package com.neutron.t22;
import java.util.*;
import java.util.concurrent.*;
/**
* 写时复制容器 copy on write
* 多线程环境下, 写时效率低,读时效率高
* 适合写少读多的情况
*/
public class T222CopyOnWrite {
/**
* 测试什么内容?
* 创建1个容器,开启10个线程,每个线程向容器内加入10000个数据,来测试不同容器的执行时间
*/
public static void main(String[] args) {
List<String> lists =
// new ArrayList<>(); // 并发会存在问题
// new Vector<>(); // 无并发问题,但是很慢
new CopyOnWriteArrayList<>(); // 没有并发问题,但是速度实在太慢
Random r = new Random();
Thread[] ths = new Thread[100];
for (int i = 0; i < ths.length; i++) {
ths[i] = new Thread(() -> {
for (int j = 0; j < 1000; j++) {
lists.add("l" + r.nextInt(1000));
}
});
}
runAndComputeTime(ths);
/*
使用ArrayList的执行结果,这是个错误的执行结果,目标应该是10w
执行:161
list size:98758
-------------------------------------
Vector和CopyOnWriteArrayList都没有问题
*/
System.out.println("list size:" + lists.size());
}
static void runAndComputeTime(Thread[] ths){
long start = System.currentTimeMillis();
Arrays.asList(ths).forEach(Thread::start);
Arrays.asList(ths).forEach((thread) -> {
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}
thread37 - CopyOnWrite
最新推荐文章于 2022-07-22 19:15:00 发布