前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5-线程池

5-线程池

作者头像
Ywrby
发布2022-10-27 13:23:24
1940
发布2022-10-27 13:23:24
举报
文章被收录于专栏:YwrbyYwrby

线程池的概念

本质就是一个能够容纳多个线程的容器,其中的线程可以反复利用,省去了频繁创建线程对象的操作,无需因为反复创建线程对象而消耗过多资源

线程池
线程池

工作线程(PoolWorker)

表示线程池中的线程,在没有任务时处于等待状态,可以循环的执行任务

任务队列(TaskQueue)

用于存放没有处理的任务,提供一种缓冲机制

任务接口(Task)

每个任务必须实现的接口,一共工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等等

线程池管理器(ThreadPool)

用于创建并管理线程。包括:创建线程池,销毁线程池,添加线程或任务等等

线程池创建线程来执行,而Worker执行完之后,就去队列中取未分配的task,调用task的run方法。通俗的讲就是任务来后就分配一个线程使用,线程处于占用状态,如果任务执行完毕,线程归还于线程池,并且暂处于空闲状态

合理利用线程池的好处

降低资源消耗

减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可以执行多个任务

提高响应速度

不需要频繁的创建线程,如果有线程可以直接用,不会出现系统僵死

提高线程的可管理性

线程池可以约束系统最多只能由多少个线程,不会因为线程过多而死机

线程池的核心思想

线程复用,同一个线程可以重复多次被使用,来处理多个任务

代码语言:javascript
复制
package ThreadPool;

/*
* 创建线程池
* 线程池在Java中的代表类:ExcutorService(接口)
* Java在Executors类下提供一个静态方法得到一个线程池的对象
* public static ExecutorService newFixedThreadPool(int nThreads);
* (创建一个可重用固定线程数的线程池并返回,以共享的无界队列方式来运行这些线程)
* */

import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolDemo {
    public static void main(String[] args) {
        //创建一个线程池,指定线程的固定数量是3
        ExecutorService pool= Executors.newFixedThreadPool(3);
        //添加线程任务给线程池处理
        Runnable task=new MyRunnable();
        //可以向线程池提交Runnable接口或Callable接口 ,Callable做线程池的任务可以得到线程执行的结果(返回值类型Future<?>)
        pool.submit(task);  //第一次向线程池提交任务,此时线程池创建新线程,自动触发执行,不需要再start()
        pool.submit(task);  //第二次向线程池提交任务,此时线程池创建新线程
        pool.submit(task);  //第三次向线程池提交任务,此时线程池创建新线程
        pool.submit(task);  //第四次向线程池提交任务,超出线程池固定数量,此时线程池复用之前的线程
        
        // pool.shutdown();  在等待任务执行完毕之后关闭线程池
        // pool.shutdownNow();  立即关闭线程池代码,无论任务是否执行完毕
        // 线程池开发中一般情况下不关闭
    }

}


class MyRunnable implements Runnable{

    @Override
    public void run() {
        for(int i=0;i<5;i++){
            System.out.println(Thread.currentThread().getName()+"==>"+i);
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 线程池的概念
    • 工作线程(PoolWorker)
      • 任务队列(TaskQueue)
        • 任务接口(Task)
          • 线程池管理器(ThreadPool)
            • 合理利用线程池的好处
              • 降低资源消耗
              • 提高响应速度
              • 提高线程的可管理性
            • 线程池的核心思想
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档