如果并发的线程数量很多,并且每个线程都是执行一个很短的时间就结束了,这样频繁创建线程就会大大降低系统的效率。

线程池:容纳多个线程的容器

1、线程可以反复使用,省去了频繁创建对象的操作,无需反复创建线程而消耗过多资源

2、提高响应速度,当任务到达时,任务可以不需要等到线程创建就能立即执行

3、提高线程的可管理性,可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存

原理

集合Linkedlist<Thread>,用队列的思想

当程序第一次启动的时候,创建多个线程,保存到一个集合中

当我们想要使用线程的时候,就可以从集合中取出线程来使用

Thread t=list.remove(0);//使用list,返回被移除的元素(线程只能被一个任务使用)

Thread t=linked.removeFirst();//使用linkedlist

当使用完毕后,需要把线程归还给线程池

list.add(t);

Linkedlist.addLast(t);

在JDK1.5之后,JDK内置了线程池

线程池的使用:

java.util.concurrent.Executors:线程池的工厂类,用来生成线程池

static ExcutorService newFixedThreadPool(int nThreads):创建一个可重用固定线程数的线程池

nThreads:创建线程池中包含的线程数量

返回值:ExecutorService接口,返回的是ExecutorService接口的实现类对象,可以使用ExecutorService接口接受(多态)

java.util.concurrent.ExecutorSerivice:线程池接口

用来从线程池中获取线程,调用start方法,执行线程任务

 submit(Runnable task):提交一个Runnable任务用于执行

void shutdown():关闭/销毁线程池的方法

使用步骤:

1、使用线程池的工厂类Excutors里面提供的静态方法NewFixedThreadPool生成一个指定线程数量的线程池

2、创建一个类,实现Runnable接口,重写run方法,设置线程任务

3、调用ExecutorService中的方法submit,传递线程任务(实现类),开启线程,执行Run方法

4、调用ExecutorService中的方法shutdown销毁线程池(不建议执行)

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class Demo {public static void main(String[] args) {ExecutorService es= Executors.newFixedThreadPool(2);es.submit(new Run());es.submit(new Run());es.submit(new Run());}
}

【java笔记】线程池的介绍和使用相关推荐

  1. JAVA线程池原理以及几种线程池类型介绍

    在什么情况下使用线程池? 1.单个任务处理的时间比较短      2.将需处理的任务的数量大 使用线程池的好处: 1.减少在创建和销毁线程上所花的时间以及系统资源的开销      2.如不使用线程池, ...

  2. [Java高并发系列(5)][详细]Java中线程池(1)--基本概念介绍

    1 Java中线程池概述 1.1 什么是线程池? 在一个应用当中, 我们往往需要多次使用线程, 这意味着我们需要多次创建和销毁线程.那么为什么不提供一个机制或概念来管理这些线程呢? 该创建的时候创建, ...

  3. Java并发—线程池ThreadPoolExecutor基本总结

    原文作者:Matrix海子 原文地址:Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线 ...

  4. java定时线程池_java 定时器线程池(ScheduledThreadPoolExecutor)的实现

    前言 定时器线程池提供了定时执行任务的能力,即可以延迟执行,可以周期性执行.但定时器线程池也还是线程池,最底层实现还是ThreadPoolExecutor,可以参考我的另外一篇文章多线程–精通Thre ...

  5. Java中线程池,你真的会用吗

    转载自   Java中线程池,你真的会用吗 在<深入源码分析Java线程池的实现原理>这篇文章中,我们介绍过了Java中线程池的常见用法以及基本原理. 在文中有这样一段描述: 可以通过Ex ...

  6. java中线程池的几种实现方式

    1.线程池简介:     多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.         假设一个服务器完成一项任务所需时间为:T1 ...

  7. Java中线程池,你真的会用吗?

    在<深入源码分析Java线程池的实现原理>这篇文章中,我们介绍过了Java中线程池的常见用法以及基本原理. 在文中有这样一段描述: 可以通过Executors静态工厂构建线程池,但一般不建 ...

  8. [转]深入理解Java之线程池

    原文链接 原文出处: 海 子 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这 ...

  9. 深入理解Java之线程池

    深入理解Java之线程池 原作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本文归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面 ...

  10. Java 自定义线程池

    Java 自定义线程池 https://www.cnblogs.com/yaoxiaowen/p/6576898.html public ThreadPoolExecutor(int corePool ...

最新文章

  1. Python:条件判断
  2. 砖家:游戏账号交易属违法行为 相关部门应严厉打击
  3. mysql t获取当前时间_mysql怎么设置值timestamp 以便获取当前时间
  4. 为什么说嵌入式开发比单片机要难很多?工程师谈谈自己的感悟
  5. 下载anaconda时出现“Please make sure you are connected to the internet”警告
  6. mybatis学习(38):动态sql-foreach
  7. 华为推出业界首个分布式云原生产品:华为云UCS,持续创新,深耕数字化
  8. 网站备案靠谱吗_网站外包靠谱吗目前都是什么价位
  9. sklearn特征工程
  10. react将多个公共组件归成一类,方便调用
  11. Deepin-文件目录介绍
  12. linux之mktemp命令
  13. openmv探索_4_AprilTag标记追踪
  14. 关于成功和努力的一些想法
  15. (十九)债券定价与债券收益率的计算
  16. 将支付网关添加到您的WooCommerce商店
  17. 矩阵对角化,SVD分解
  18. 基于CST相控阵天线快速设计方法
  19. AutoGluon-教程1-简单的入门模型
  20. TOPSIS法中正负理想解、正负理想距离如何计算?

热门文章

  1. NUC1170 加农炮
  2. PHP语言的RSA算法加解密程序
  3. rz、sz (上传下载)命令参数的解释
  4. 非参贝叶斯(Bayesian Non-parameter)初步
  5. Python 标准库 —— queue、heapq与PriorityQueue
  6. 整数区间内整数的因子的个数
  7. node将当前文件上传到服务器,以编程方式将文件从node.js上传到另一个Web服务器...
  8. token什么意思中文_gre是什么意思中文
  9. 启动Eclipse时,错误:WorkSpace Unavailable
  10. python基础知识-python基础知识(一)