public static void main(String[] args) {
final int CORE_POOL_SIZE = 5;
final int MAX_POOL_SIZE = 10;
final int QUEUE_CAPACITY = 100;
final Long KEEP_ALIVE_TIME = 1L;
//使用阿里巴巴推荐的创建线程池的方式
//通过ThreadPoolExecutor构造函数自定义参数创建
ThreadPoolExecutor executor = new ThreadPoolExecutor(
CORE_POOL_SIZE,
MAX_POOL_SIZE,
KEEP_ALIVE_TIME,
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(QUEUE_CAPACITY),
new ThreadPoolExecutor.CallerRunsPolicy());
HashSet<String> hashSet = new HashSet<>();
String str="";
Random r = new Random();
/*
写性能比较
*/
// 方法1
long a = System.currentTimeMillis();
Set<String> synchronizedSet = Collections.synchronizedSet(new HashSet<>());
for (int i = 0; i < 1000000; i++) {
Thread thread = new Thread(() -> {
synchronizedSet.add("param2"+r.nextInt(100000)+1);
});
executor.execute(thread);
// synchronizedSet.add("param2"+r.nextInt(1000000)+1);
}
long b = System.currentTimeMillis();
// 方法2
Set<String> set= Collections.newSetFromMap(new ConcurrentHashMap<>());
for (int i = 0; i < 1000000; i++) {
Thread thread = new Thread(() -> {
set.add("param2"+r.nextInt(100000)+1);
});
executor.execute(thread);
// set.add("param2"+r.nextInt(1000000)+1);
}
long c = System.currentTimeMillis();
// 方法3
Set<String> copyOnWriteArraySet = new CopyOnWriteArraySet<>();
for (int i = 0; i < 1000000; i++) {
Thread thread = new Thread(() -> {
copyOnWriteArraySet.add("param2"+r.nextInt(100000)+1);
});
executor.execute(thread);
// copyOnWriteArraySet.add("param2"+i);
}
long d = System.currentTimeMillis();
System.out.println("写性能比较------------------------------------");
System.out.println("Collections.synchronizedSet time == "+(b-a));
System.out.println("Collections.newSetFromMap time == "+(c-b));
System.out.println("CopyOnWriteArraySet time == "+(d-c));
/*
读性能比较
*/
// 方法1
long a2 = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
Thread thread = new Thread(() -> {
synchronizedSet.contains("param2"+r.nextInt(100000)+1);
});
executor.execute(thread);
// synchronizedSet.contains("param2"+r.nextInt(1000000)+1);
}
long b2 = System.currentTimeMillis();
// 方法2
for (int i = 0; i < 1000000; i++) {
Thread thread = new Thread(() -> {
set.contains("param2"+r.nextInt(100000)+1);
});
executor.execute(thread);
// set.contains("param2"+r.nextInt(1000000)+1);
}
long c2 = System.currentTimeMillis();
// 方法3
for (int i = 0; i < 1000000; i++) {
Thread thread = new Thread(() -> {
copyOnWriteArraySet.contains("param2"+r.nextInt(100000)+1);
});
executor.execute(thread);
// copyOnWriteArraySet.contains("param2"+r.nextInt(100000)+1);
}
long d2 = System.currentTimeMillis();
System.out.println("读性能比较------------------------------------");
System.out.println("Collections.synchronizedSet time == "+(b2-a2));
System.out.println("Collections.newSetFromMap time == "+(c2-b2));
System.out.println("CopyOnWriteArraySet time == "+(d2-c2));
}
结果
写性能比较------------------------------------
Collections.synchronizedSet time == 3224
Collections.newSetFromMap time == 2637
CopyOnWriteArraySet time == 62363
读性能比较------------------------------------
Collections.synchronizedSet time == 2318
Collections.newSetFromMap time == 2388
CopyOnWriteArraySet time == 59258