import java.util.concurrent.*;
/**
* 多线程线程池的基本创建,使用方法
*
* @author silence
*/
public class Silence {
public static void main(String[] args) {
//创建一个线程池 最大线程数量20 核心线程15
//如果提交了超过15 不超过20的任务,会创建临时线程。
//临时线程超过 60秒会被销毁
//如果提交任务数量,超过 最大线程数量+排队数量, 会抛出异常
ThreadPoolExecutor thread = new ThreadPoolExecutor(
//核心线程
5,
//最大线程数量
10,
//等待时间
60,
//等待时间的单位(秒)
TimeUnit.SECONDS,
//阻塞队列,排队的数量
new ArrayBlockingQueue<>(10),
//默认线程工厂
Executors.defaultThreadFactory(),
//超出任务的拒绝策略
new ThreadPoolExecutor.AbortPolicy()
);
//提交十个线程任务,并让他暂时阻塞在哪里
for (int i = 0; i < 8; i++) {
//判断线程池有没有提交满
while (true) {
//正在执行的线程数量
int activeCount = thread.getActiveCount();
//最大线程数
int maximumPoolSize = thread.getMaximumPoolSize();
//如果线程池没满就提交
//提交线程任务
if (activeCount < maximumPoolSize) {
thread.submit(() -> {
System.out.println("线程提交");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
break;
}
}
}
//关闭线程池
thread.shutdown();
//线程池关闭后,已提交的线程任务。可以继续执行,但不能提交新任务
//可以在确定没有线程任务提交之后关闭
/* thread.submit(()->{
System.out.println("55");
});*/
//返回正在执行任务的线程的大概数量。
int activeCount = thread.getActiveCount();
System.out.println("返回正在执行任务的线程的大概数量:" + activeCount);
//返回允许的最大线程数。
/* int maximumPoolSize = thread.getMaximumPoolSize();
System.out.println("返回允许的最大线程数:" + maximumPoolSize);*/
//如果所有任务在关闭后完成,则返回 true 。
/* boolean terminated = thread.isTerminated();
System.out.println("如果所有任务在关闭后完成,则返回 true: " + terminated);*/
//
BlockingQueue<Runnable> queue = thread.getQueue();
System.out.println("队列排队的任务个数:" + queue.size());
}
}
多线程线程池的基本创建,使用方法
最新推荐文章于 2022-06-19 23:18:28 发布