池与线程池 技术点 目录 1. 线程池作用: 提升性能 1 2. 使用流程 1 3. 线程与线程池的监控 jvisual 1 4. 线程常用方法 2 5. 线程池相关概念 2 5.1. 队列
池与线程池 技术点
目录
1. 线程池作用: 提升性能 1
2. 使用流程 1
3. 线程与线程池的监控 jvisual 1
4. 线程常用方法 2
5. 线程池相关概念 2
5.1. 队列 BlockingQueue介绍 2
5.2. 原子操作 2
6. 用途 2
7. Java线程面试问题 2
7.1. 在java中wait和sleep方法的不同? 2
8. 确定线程池数量的简单方法 3
9. 线程池中的几种重要的参数及流程说明 3
Need rejenlei from myesi docx
- 线程池作用: 提升性能
类似 对象池,数据库连接池
- 使用流程
建立线程池。。
添加线程。。
- 线程与线程池的监控 jvisual
- 线程常用方法
join方法,等待线程t执行完毕
Wait sleep
- 线程池相关概念
- 队列 BlockingQueue介绍
- 原子操作
- 用途
生产者、消费者有很多的实现方法:
- 用wait() / notify()方法
- 用Lock的多Condition方法
- BlockingQueue阻塞队列方法
- Java线程面试问题
- 在java中wait和sleep方法的不同?
通常会在电话面试中经常被问到的Java线程面试问题。
最大的不同是在等待时wait会释放锁,而sleep一直持有锁。Wait通常被用于线程间交互,sleep通常被用于暂停执行
- 确定线程池数量的简单方法
算法类,一般是cpu核心数
Io类,一般提升一个数量级。。具体根据io繁忙程度调整
- 线程池中的几种重要的参数及流程说明
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
corePoolSize:核心池的大小,这个参数跟后面讲述的线程池的实现原理有非常大的关系。在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来才创建线程去执行任务,除非调用了prestartAllCoreThreads()或者prestartCoreThread()方法,从这2个方法的名字就可以看出,是预创建线程的意思,即在没有任务到来之前就创建corePoolSize个线程或者一个线程。默认情况下,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中;
maximumPoolSize:线程池最大线程数,这个参数也是一个非常重要的参数,它表示在线程池中最多能创建多少个线程;
keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止。默认情况下,只有当线程池中的线程数大于corePoolSize时,keepAliveTime才会起作用,直到线程池中的线程数不大于corePoolSize,即当线程池中的线程数大于corePoolSize时,如果一个线程空闲的时间达到keepAliveTime,则会终止,直到线程池中的线程数不超过corePoolSize。但是如果调用了allowCoreThreadTimeOut(boolean)方法,在线程池中的线程数不大于corePoolSize时,keepAliveTime参数也会起作用,直到线程池中的线程数为0;
unit:参数keepAliveTime的时间单位,有7种取值,在TimeUnit类中有7种静态属性:
TimeUnit.DAYS; //天
TimeUnit.HOURS; //小时
TimeUnit.MINUTES; //分钟
TimeUnit.SECONDS; //秒
TimeUnit.MILLISECONDS; //毫秒
TimeUnit.MICROSECONDS; //微妙
TimeUnit.NANOSECONDS; //纳秒
workQueue:一个阻塞队列,用来存储等待执行的任务,这个参数的选择也很重要,会对线程池的运行过程产生重大影响,一般来说,这里的阻塞队列有以下几种选择:
ArrayBlockingQueue
LinkedBlockingQueue
SynchronousQueue
PriorityBlockingQueue
ArrayBlockingQueue和PriorityBlockingQueue使用较少,一般使用LinkedBlockingQueue和SynchronousQueue。线程池的排队策略与BlockingQueue有关。
threadFactory:用于设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程做些更有意义的事情,比如设置daemon和优先级等等
handler:表示当拒绝处理任务时的策略,有以下四种取值:
1、AbortPolicy:直接抛出异常。2、CallerRunsPolicy:只用调用者所在线程来运行任务。3、DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务。4、DiscardPolicy:不处理,丢弃掉。5、也可以根据应用场景需要来实现RejectedExecutionHandler接口自定义策略。如记录日志或持久化不能处理的任务。
}
2. 线程池问题 4
2.1. 什么是线程池: 4
2.2. 一个线程池包括以下四个基本组成部分:线程池管理器(ThreadPool)工作线程(PoolWorker)任务接口(Task)任务队列(taskQueue): 5
2.3. 2.常见线程池newFixedThreadExecutor(n) ③newCacheThreadExecutor(推荐使用) 5
2.4. 二:线程池线程池的作用: 5
2.5. 为什么要用线程池: 6
2.6. 排队有三种通用策略:直接提交。无界队列。有界队列。 6
3. 线程池常见参数 6
3.1. 为什么要使用线程池? 8
3.2. 线程池有什么作用? 8
3.3. 说说几种常见的线程池及使用场景 8
3.4. 线程池都有哪几种工作队列 8
3.5. 怎么理解无界队列和有界队列 9
池与线程池 技术点 目录 1. 线程池作用: 提升性能 1 2. 使用流程 1 3. 线程与线程池的监控 jvisual 1 4. 线程常用方法 2 5. 线程池相关概念 2 5.1. 队列相关推荐
- java 多线程 张孝祥_多线程11_张孝祥 java5的线程锁技术
本例子因为两个线程公用同线程中,使用同一个对象,实现了他们公用一把锁,实现了同一个方法的互斥. package locks; /** *会被打乱的效果 */ public class LockTest ...
- JDBC:软件架构、概述、数据库连接:普通项目添加jar包,URL、sql注入,类型转换,查询流程表、操作BLOB类型字段、批量插入,替换jar包、事务/数据库连接池
0 常识说明 0.1 软件架构方式介绍 B/S架构:浏览器 与 服务器之间的交互. C/S架构:安装的本地软件(如:今日头条等) 与 服务器进行交互. 0.2 JavaWeb技术概览 JDBC核心技术 ...
- DL之CNN:卷积神经网络算法简介之原理简介(步幅/填充/特征图)、七大层级结构(动态图详解卷积/池化+方块法理解卷积运算)、CNN各层作用及其可视化等之详细攻略
DL之CNN:卷积神经网络算法简介之原理简介(步幅/填充/特征图).七大层级结构(动态图详解卷积/池化+方块法理解卷积运算).CNN各层作用及其可视化等之详细攻略 目录 CNN 的层级结构及相关概念 ...
- Java高并发编程:线程锁技术
目录 1 什么是线程锁 2 synchronized 1. 对象锁 2. 修饰对象方法 3. 类锁 4. 对象锁和类锁 5. 卖火车票示例 6. 生产一个消费一个示例 3 Lock 3.1 重入锁 R ...
- 转:C# 线程同步技术 Monitor 和Lock
原文地址:http://www.cnblogs.com/lxblog/archive/2013/03/07/2947182.html 今天我们总结一下 C#线程同步 中的 Monitor 类 和 Lo ...
- .Net线程同步技术解读
C#开发者(面试者)都会遇到lock(Monitor),Mutex,Semaphore,SemaphoreSlim这四个与锁相关的C#类型,本文期望以最简洁明了的方式阐述四种对象的区别. 什么是线程安 ...
- 用Visual C++实现远程线程嵌入技术
用Visual C++实现远程线程嵌入技术 远程线程技术指的是通过在另一个进程中创建远程线程的方法进入那个进程的内存地址空间.我们知道,在进程中,可以通过CreateThread函数创建线程,被创建的 ...
- 11_张孝祥_多线程_线程锁技术
转载 Java并发编程:Lock locks相关类 锁相关的类都在包java.util.concurrent.locks下,有以下类和接口: |---AbstractOwnableSynchroniz ...
- 基于线程局部存储技术的多通道数控系统仿真[图]
基于线程局部存储技术的多通道数控系统仿真[图] http://www.c114.net ( 2012/4/9 11:27 ) 1 概述 组件对象模型(CompONent Object Model, C ...
- 连傻瓜都能看懂的基于代码注入的线程守护技术
连傻瓜都能看懂的基于代码注入的线程守护技术 2010年08月31日 连傻瓜都能看懂的基于代码注入的线程守护技术 Author: 叶紫孤(CPP肥兔) (感谢冷风大哥提供技术支持) E-mail: ye ...
最新文章
- 预定义的类型“Microsoft.CSharp.RuntimeBinder.Binder”未定义或未导入
- java中main方法前的public static void及其后面的(String[] args)【笔记自用】
- 套接字编程——基于UDP协议
- chrome浏览器中遇到bug【Error in event handler: TypeError: Cannot read property 'name' of undefined】
- C++函数模板和普通函数的调用规则
- 台达plc控制伺服电机编程实例_PLC控制伺服电机:控制脉冲的相关计算
- 在docker容器里创建ubuntu系统
- 2021-06-29提交表单事件
- 谷歌开源 Embedding Projector 高维数据可视化--转自开源中国
- plc无线连接服务器,plc连接云服务器
- 漫谈多模光纤类型:OM1、OM2、OM3、OM4、OM5,深度好文,值得阅读
- 3D场景建模学习必备的基础知识
- 百度技术:“App 优化网络,先从 HTTPDNS 开始” | 原理到实战
- [转自mop]各大高校BBS上的100个爆笑的签名档
- 云原生钻石课程 | 第6课:Kubernetes网络架构原理深度剖析(上)
- 公共WiFi有风险,这些风险你都知道吗
- [Python]小甲鱼Python视频第023~024课(递归:这帮小兔崽子、汉诺塔)课后题及参考解答...
- 2022熔化焊接与热切割操作证考试题库及模拟考试
- UR机械臂学习(9):加入robotiq力传感器
- FileZilla for mac(FTP工具)
热门文章
- mysql升级到8.0.17_windows10更换mysql8.0.17详细教程
- 内网访问已经启动的vue项目
- html5--select与HTML5新增的datalist元素
- 51 Nod 1005 大数加法【Java大数乱搞,python大数乱搞】
- [25年后的统计系会是什么样?
- 两步实现在Git Bash中用Sublime打开文件
- 与target_el 相关的 makeNode
- 张口就问“CCIE”月薪多少
- LeetCode 344. Reverse String(反转字符串)
- Express4.x API (一):application (译)