线程池

池化技术

  • 线程属于稀缺资源,由于创建线程和销毁线程十分消耗内存和资源,因此实现线程的复用十分重要
  • 将创建的线程存入线程池管理,实现线程的复用,提高了cpu利用率
  • 池化技术,比如连接池、对象池、内存池.......

实现线程的复用

  • 创建一个线程,执行完线程后该线程就被销毁了,因此需要将线程一直处于运行状态
  • 使用阻塞队列来添加任务,当任务执行完毕时,线程一直运行,占用cpu资源,考虑将线程阻塞,当有任务添加进队列时,线程继续执行任务
  • 模型:阻塞队列 + 生产者(添加任务)----消费者(执行任务)

线程池模型

思考

  • 当任务队列添加满后,考虑
  1. 扩容队列
  2. 增加消费者数量 ----> 创建线程
    1. 当任务执行完毕后,非创建的线程,一直运行占用cpu资源,故需要设置线程超时时间,使空闲线程销毁
  3. 若队列还是满了后,----->限流

 

 无需区分核心线程数和非核心线程数,只需关心保留的线程数

 使用线程池

public static void main(String[] args) {

ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 15, 5000, TimeUnit.MILLISECONDS,
new ArrayBlockingQueue<Runnable>(10));

threadPoolExecutor.submit(()->{
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + "执行任务");
}
});
}

  

 

posted @ 2022-10-08 23:22  Joshua_BlueSky  阅读(20)  评论(0)    收藏  举报