首页 > 其他分享 >线程池

线程池

时间:2022-10-08 23:35:59浏览次数:47  
标签:10 队列 创建 任务 线程 cpu

池化技术

  • 线程属于稀缺资源,由于创建线程和销毁线程十分消耗内存和资源,因此实现线程的复用十分重要
  • 将创建的线程存入线程池管理,实现线程的复用,提高了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() + "执行任务");
}
});
}

  

 

标签:10,队列,创建,任务,线程,cpu
From: https://www.cnblogs.com/Joshua-BlueSky/p/16770648.html

相关文章

  • Python 守护线程
    如果你设置一个线程为守护线程,,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线......
  • 阻塞队列、线程池、原子性及并发工具类
    目录​​一、阻塞队列​​​​二、线程池​​​​静态方法创建线程池:​​​​使用ThreadPoolexecutor类创建线程池:​​​​三、原子性​​​​四、并发工具类​​​​HashTa......
  • 同步代码块、同步方法解决数据安全问题、线程安全的类及Lock锁
    目录​​一、同步代码块解决数据安全问题​​​​二、同步方法解决数据安全问题​​​​三、线程安全的类​​​​四、Lock锁​​一、同步代码块解决数据安全问题安全问题出......
  • ThreadLocal本地局部线程demo
    ThreadLocal本地局部线程demoimportorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjava.util.HashMap;importjava.util.Map;/***本工具只能保存一......
  • Java中如何实现两个线程交替运行呢?
    今天笔者收到老师的一个题目,让我准备两个流程,依次实现输出以下信息 如:  线程A打印字母a,线程B打印数字1线程A打印字母b,线程B打印数字2线程A打印字母......
  • Python多线程
    一、概念线程是CPU分配资源的基本单位,当程序开始运行,这个程序就变成了一个进程;当有多线程编程时,一个进程包含多个线程(含主线程),使用线程可以实现程序大的开发任务。多线......
  • Java小白自学笔记——线程
    一、线程的相关概念1.程序:是为完成特定任务,用某种语言编写的一组指令的集合。简单地说:就是我们写的代码2.进程:(1)进程是指运行中的程序,启动了一个进程,操作系统就......
  • Java_多线程
    Java_多线程1.实现多线程1.1进程和线程【理解】进程:是正在运行的程序是系统进行资源分配和调用的独立单位每一个进程都有它自己的内存空间和系统资源线程:是进程......
  • TTD 专题 (第一篇):C# 那些短命线程都在干什么?
    一:背景1.讲故事在分析的众多dump中,经常会遇到各种奇葩的问题,仅通过dump这种快照形式还是有很多问题搞不定,而通过perfview这种粒度又太粗,很难找到问题之所在,真的很头疼,比如......
  • 为什么说js是单线程?
    为了搞清楚这个问题,我们需要先了解这几个东西:1.什么是线程?什么是进程?他们之间的关系?2.什么是任务队列(EventQueue)?3.什么是事件循环?4.为什么说js是单线程?5.为什么j......