新增:线程池的意义,性能只是一方面。比性能跟重要的是,程序的稳定性。
废话不多说,直接上代码和结论:
package com.ripplechan.part_1_2_3;
import lombok.Data;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author RippleChan
* @date 2018-09-21
* @time 15:39
*/
public class MyTest {
public static void main(String[] args) throws InterruptedException {
int[] counts = {10,100,1000,10000,100000,1000000,10000000};
Performance performance = new Performance();
for (int i = 0; i < counts.length; i++) {
performance.runWithPoolSingle(counts[i]);
}
}
public void runWithPoolSingle(int count) throws InterruptedException {
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(8, count, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(1024), new ThreadPoolExecutor.AbortPolicy());
/**
* ReentrantLock
*/
CountDownLatch countDownLatch2 = new CountDownLatch(count);
ReentrantThread reentrantThread = new ReentrantThread(countDownLatch2);
long l6 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
threadPoolExecutor.execute(reentrantThread);
}
countDownLatch2.await();
long l7 = System.currentTimeMillis();
long l8 = l7 - l6;
System.out.println(count+" ReentrantLock "+l8);
threadPoolExecutor.shutdown();
}
}
@Data
class ReentrantThread extends Thread {
private Long sum = 0L;
private final CountDownLatch countDownLatch;
private final ReentrantLock lock = new ReentrantLock();
public ReentrantThread(CountDownLatch countDownLatch) {
this.countDownLatch = countDownLatch;
}
@Override
public void run() {
try {
lock.lock();
this.sum = sum + 1;
}finally {
lock.unlock();
countDownLatch.countDown();
}
}
}