Java线程池使用和常用参数(待续)
线程池怎么实现的,核心参数讲一讲?
Executors是线程池的工厂类,通过调用它的静态方法如下:
Executors.newCachedThreadPool();
Executors.newFixedThreadPool();
可返回一个线程池。这些静态方法统一返回一个ThreadPoolExecutor,只是参数不同。
public ThreadPoolExecutor
(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnaable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler){}
1、corePoolSize:指定了线程池中线程的数量
2、maximumPoolSize:线程池中的最大线程数量
3、keepAliveTime:当线程池中线程数量超过corePoolSize时,多余的空闲线程的存活时间
4、unit:上一个参数keepAliveTime的单位
5、任务队列:被提交还未被执行的任务
6、threadFactory:线程工厂,用于创建线程,一般默认工厂即可
7、handler:拒绝策略,当任务太多来不及处理,采用什么方法拒绝任务
最重要的是任务队列和拒绝策略
任务队列主要有ArrayBlockingQueue有界队列、LinkedBlockingQueue无界队列、SynchronousQueue直接提交队列。
1、ArrayBlockingQueue:
当线程池中实际线程数小于核心线程数时,直接创建线程执行任务;
当大于核心线程数而小于最大线程数时,提交到任务队列中;
因为这个队列是有界的,当队列满时,在不大于最大线程的前提下,创建线程执行任务;
若大于最大线程数,执行拒绝策略。
2、LinkedBlockingQueue:
当线程池中实际线程数小于核心线程数时,直接创建线程执行任务;
当大于核心线程数而小于最大线程数时,提交到任务队列中;
因为这个队列是无界的,所以之后提交的任务都会进入任务队列中。
newFixedThreadPool就采用了无界队列,同时指定核心线程和最大线程数一样。
3、SynchronousQueue:
该队列没有容量,对提交任务不做保存,直接增加新线程来执行任务。
newCachedThreadPool使用的是直接提交队列,核心线程数是0,最大线程数是整型的最大值,
keepAliveTime是60s,因此当新任务提交时,若没有空闲线程都是新增线程来执行任务,
不过由于核心线程数是0,当60s就会回收空闲线程。
当线程池中的线程达到最大线程数时,就要开始执行拒绝策略了,如下:
1、直接抛出异常
2、在调用者的线程中,运行当前任务
3、丢弃队列最近的一个任务,也就是将队列头的任务poll出去
4、默默丢弃无法处理的任务,不做任何处理
Java线程池使用和常用参数(待续)的更多相关文章
- Java线程池使用和常用参数
多线程问题: 1.java中为什么要使用多线程使用多线程,可以把一些大任务分解成多个小任务来执行,多个小任务之间互不影像,同时进行,这样,充分利用了cpu资源. 2.java中简单的实现多线程的方式 ...
- java线程池和五种常用线程池的策略使用与解析
java线程池和五种常用线程池策略使用与解析 一.线程池 关于为什么要使用线程池久不赘述了,首先看一下java中作为线程池Executor底层实现类的ThredPoolExecutor的构造函数 pu ...
- java线程池与五种常用线程池策略使用与解析
背景:面试中会要求对5中线程池作分析.所以要熟知线程池的运行细节,如CachedThreadPool会引发oom吗? java线程池与五种常用线程池策略使用与解析 可选择的阻塞队列BlockingQu ...
- Java线程池参数
关于Java线程池的参数设置.线程池是Java多线程里开发里的重要内容,使用难度不大,但如何用好就要明白参数的含义和如何去设置.干货里的内容大多是参考别人的,加入了一些知识点的扩充和看法.希望能对多线 ...
- Java线程池七个参数详解
Java多线程开发时,常常用到线程池技术,这篇文章是对创建java线程池时的七个参数的详细解释. 从源码中可以看出,线程池的构造函数有7个参数,分别是corePoolSize.maximumPoolS ...
- Java线程池使用说明
Java线程池使用说明 转自:http://blog.csdn.net/sd0902/article/details/8395677 一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极 ...
- 四种Java线程池用法解析
本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 执行一个异步任务你还只是如下 ...
- [转 ]-- Java线程池使用说明
Java线程池使用说明 原文地址:http://blog.csdn.net/sd0902/article/details/8395677 一简介 线程的使用在java中占有极其重要的地位,在jdk1. ...
- java线程池的使用与详解
java线程池的使用与详解 [转载]本文转载自两篇博文: 1.Java并发编程:线程池的使用:http://www.cnblogs.com/dolphin0520/p/3932921.html ...
随机推荐
- MVC网站发布到 IIS
接下来将发布成功的站点部署到iis7.0. 步骤如下: 1. 安装 Microsoft .net FrameWork 4.0安装包(网站开发时候使用的就是.net framework4.0框架); 2 ...
- 驱动学习5: zynq实现点亮led
驱动代码: #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #i ...
- HDU 5144 三分
开始推导用公式求了好久(真的蠢),发现精度有点不够. 其实这种凸线上求点类的应该上三分法的,当作入门吧... /** @Date : 2017-09-23 21:15:57 * @FileName: ...
- CF839 C 树形DP 期望
给一颗树,求从根出发路径长度的期望是多少. 树形DP 要想清楚期望的计算 /** @Date : 2017-08-12 23:09:41 * @FileName: C.cpp * @Platform: ...
- web开发之Servlet 二
在上一篇文章中,我们演示也证明了Servlet 是一种动态web资源开发的技术,即我可以在浏览器中输入URL,然后就可以在浏览器中看到我们编写的Servlet资源. 那当我们在浏览器上一起一个HTTP ...
- GridControl详解(二)表格的列名配置
点击Run Designer控件上的按钮,弹出视图设计窗口: 列配置: 我们配置完列名后,会发现设计视图发生了变化:
- 30款基于 jQuery & CSS3 的加载动画和进度条插件
我们所生活每一天看到的新技术或新设计潮流的兴起,Web 开发正处在上升的时代.HTML5 & CSS3 技术的发展让 Web 端可以实现的功能越来越强大. 加载动画和进度条使网站更具吸引力.该 ...
- spring 添加controller返回值绑定
@EnableWebMvc @Configuration public class Config { @Autowired private RequestMappingHandlerAdapter h ...
- Selenium/HtmlUnit设置代理获取JS生成的网页
通常我们使用Java提供的HttpURLConnection或者Apache的HttpClient获取的网页源代码都是直观可见的,其代码的内容和通过浏览器右键网页->点击查看网页源代码的内容一致 ...
- 【洛谷P2676】超级书架
题目描述 Farmer John最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了.现在,只有书架的顶上还留有一点空间. 所有N(1 <= N & ...