【java笔记】线程池的介绍和使用
如果并发的线程数量很多,并且每个线程都是执行一个很短的时间就结束了,这样频繁创建线程就会大大降低系统的效率。
线程池:容纳多个线程的容器
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笔记】线程池的介绍和使用相关推荐
- JAVA线程池原理以及几种线程池类型介绍
在什么情况下使用线程池? 1.单个任务处理的时间比较短 2.将需处理的任务的数量大 使用线程池的好处: 1.减少在创建和销毁线程上所花的时间以及系统资源的开销 2.如不使用线程池, ...
- [Java高并发系列(5)][详细]Java中线程池(1)--基本概念介绍
1 Java中线程池概述 1.1 什么是线程池? 在一个应用当中, 我们往往需要多次使用线程, 这意味着我们需要多次创建和销毁线程.那么为什么不提供一个机制或概念来管理这些线程呢? 该创建的时候创建, ...
- Java并发—线程池ThreadPoolExecutor基本总结
原文作者:Matrix海子 原文地址:Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线 ...
- java定时线程池_java 定时器线程池(ScheduledThreadPoolExecutor)的实现
前言 定时器线程池提供了定时执行任务的能力,即可以延迟执行,可以周期性执行.但定时器线程池也还是线程池,最底层实现还是ThreadPoolExecutor,可以参考我的另外一篇文章多线程–精通Thre ...
- Java中线程池,你真的会用吗
转载自 Java中线程池,你真的会用吗 在<深入源码分析Java线程池的实现原理>这篇文章中,我们介绍过了Java中线程池的常见用法以及基本原理. 在文中有这样一段描述: 可以通过Ex ...
- java中线程池的几种实现方式
1.线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 ...
- Java中线程池,你真的会用吗?
在<深入源码分析Java线程池的实现原理>这篇文章中,我们介绍过了Java中线程池的常见用法以及基本原理. 在文中有这样一段描述: 可以通过Executors静态工厂构建线程池,但一般不建 ...
- [转]深入理解Java之线程池
原文链接 原文出处: 海 子 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这 ...
- 深入理解Java之线程池
深入理解Java之线程池 原作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本文归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面 ...
- Java 自定义线程池
Java 自定义线程池 https://www.cnblogs.com/yaoxiaowen/p/6576898.html public ThreadPoolExecutor(int corePool ...
最新文章
- Python:条件判断
- 砖家:游戏账号交易属违法行为 相关部门应严厉打击
- mysql t获取当前时间_mysql怎么设置值timestamp 以便获取当前时间
- 为什么说嵌入式开发比单片机要难很多?工程师谈谈自己的感悟
- 下载anaconda时出现“Please make sure you are connected to the internet”警告
- mybatis学习(38):动态sql-foreach
- 华为推出业界首个分布式云原生产品:华为云UCS,持续创新,深耕数字化
- 网站备案靠谱吗_网站外包靠谱吗目前都是什么价位
- sklearn特征工程
- react将多个公共组件归成一类,方便调用
- Deepin-文件目录介绍
- linux之mktemp命令
- openmv探索_4_AprilTag标记追踪
- 关于成功和努力的一些想法
- (十九)债券定价与债券收益率的计算
- 将支付网关添加到您的WooCommerce商店
- 矩阵对角化,SVD分解
- 基于CST相控阵天线快速设计方法
- AutoGluon-教程1-简单的入门模型
- TOPSIS法中正负理想解、正负理想距离如何计算?
热门文章
- NUC1170 加农炮
- PHP语言的RSA算法加解密程序
- rz、sz (上传下载)命令参数的解释
- 非参贝叶斯(Bayesian Non-parameter)初步
- Python 标准库 —— queue、heapq与PriorityQueue
- 整数区间内整数的因子的个数
- node将当前文件上传到服务器,以编程方式将文件从node.js上传到另一个Web服务器...
- token什么意思中文_gre是什么意思中文
- 启动Eclipse时,错误:WorkSpace Unavailable
- python基础知识-python基础知识(一)