直接上案例代码实现:
public class ThreadPool {
public static void main(String[] args) {
//需要计算字符串长度的集合
List<String> strings = new ArrayList<>();
strings.add("awewewewsasasaasew");
strings.add("dsdsddsdasssasb");
strings.add("cdsfvffdvfasssaassasasdvfdv");
strings.add("weeewewwasassasasasaed");
strings.add("weeewasassasasasaed");
strings.add("weeewasassassaed");
strings.add("weeewasassaed");
//记录集合的长度
int dataSize = strings.size();
//创建一个同步工具类对象,用来协调多个线程之间的同步
CountDownLatch countDownLatch = new CountDownLatch(dataSize);
//创建一个5个线程的线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
//记录字符串总长度
AtomicInteger sum = new AtomicInteger(0);
try {
for (int i =0;i<dataSize;i++) {
int index = i;
executor.execute(()->{
try {
//此处编写你需要实现的线程任务
System.out.println("线程:"+Thread.currentThread().getName()+"开始执行计算字符串长度");
//计算字符串长度
int len = strings.get(index).length();
//记录字符串的长度
sum.addAndGet(len);
}catch (Exception e){
System.out.println("计算第"+index+"条请求出错:"+e.getMessage());
e.printStackTrace();
}finally {
//每个线程开启并运行完成之后计数器都减去1
countDownLatch.countDown();
}
});
}
countDownLatch.await();
} catch (Exception e){
e.printStackTrace();
} finally {
//关闭线程池
executor.shutdown();
}
System.out.println("字符串总长度:" + sum.get());
}
}