package com.atguigu.juc;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/*
- 一、线程池:维护了一个线程队列,队列中有多个处于等待状态的线程,避免了每次新建与销毁线程的额外开销,提高了相应速度。
- 二、线程池的体系结构
- java.util.concurrent.Executor : 线程池与线程调度的根接口
-
|-- ** java.util.concurrent.ExecutorService : 线程池的根接口
-
|-- java.util.concurrent.ThreadPoolExecutor : 线程池的实现类
-
|-- java.util.concurrent.ScheduledExecutorService : 线程调度的子接口
-
|--java.util.concurrent.ScheduledThreadPoolExecutor : 继承了 ThreadPoolExecutor, 实现了 ScheduledExecutorService
- 三、java.util.concurrent.Executors 工具类
- ExecutorService newCachedThreadPool() : 缓存线程池,可根据实际应用,自动的分配线程个数
- ExecutorService newFixedThreadPool() : 固定大小的线程池
- ExecutorService newSingleThreadExecutor() : 只有一个线程的线程池
- ScheduledExecutorService newScheduledThreadPool(int corePoolSize) : 线程调度的线程池,可以延迟或定时执行任务
*/
public class TestThreadPool {
public static void main(String[] args) throws Exception {
ExecutorService pool = Executors.newFixedThreadPool(5);
List<Future<Integer>> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Future<Integer> future = pool.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int num = (int)(Math.random() * 101);
System.out.println(Thread.currentThread().getName() + ":" + num);
return num;
}
});
list.add(future);
}
pool.shutdown();
for (Future<Integer> future : list) {
System.out.println(future.get());
}
/*ThreadPoolDemo tp = new ThreadPoolDemo();
//创建数量为 5 的线程池
ExecutorService pool = Executors.newFixedThreadPool(10);
//分配任务
for (int i = 0; i < 10; i++) {
pool.submit(tp);
}
//释放资源
pool.shutdown();*/
}
/*
* new Thread(tp).start();
* new Thread(tp).start();
*/
}
class ThreadPoolDemo implements Runnable{
private int i = 0;
@Override
public void run() {
while(i <= 100){
System.out.println(Thread.currentThread().getName() + ":" + i++);
}
}
}