CopyOnWriteArrayList 1.存在缺陷,不适合实时数据应用场景。2.适合读多写少的场景。3.该类线程安全(ReentrantLock) 4. 读写分离思想
package com.ct.collection;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.*;
/**
* 2021年3月15日
* Administrator
* CopyOnWriteArrayList 1.存在缺陷,不适合实时数据应用场景。2.适合读多写少的场景。3.该类线程安全(ReentrantLock) 4. 读写分离思想
*/
public class CopyOnWriteArrayListDemo {
public static void main(String[] args) {
CopyOnWriteArrayList<Integer> list = new CopyOnWriteArrayList(Arrays.asList(1,2));
ExecutorService service = new ThreadPoolExecutor(3, Runtime.getRuntime().availableProcessors(), 0, TimeUnit.SECONDS, new LinkedBlockingQueue<>(50));
service.execute(new READ(list,"jack read"));
service.execute(new Write(list,"Ellen write"));
service.execute(new READ(list,"马克 read"));
service.execute(new READ(list,"cheng read"));
service.shutdown();
}
private static class Write implements Runnable {
private final List list ;
private String name;
public Write(List list,String name) {
this.list = list;
this.name = name;
}
@Override
public void run() {
//list.clear();
try {
//故意休眠时间久点,这样读线程就获取不了实时数据。
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
list.add(100);
list.add(101);
list.forEach(X-> System.out.println(this.name+"\t"+X));
}
}
private static class READ implements Runnable{
private final List list ;
private String name;
public READ(List list,String name) {
this.list = list;
this.name = name;
}
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
list.forEach(X-> System.out.println(this.name+"\t"+X));
}
}
}