Java_多线程2_线程池
线程池(pool):
线程池的作用:
1、节省资源,减少线程的数量和创建销毁线程的开销
2、合理的管理线程的分配 线程池的创建:
1、newCachedThreadPool //优点:很灵活,弹性的线程管理,需要多少线程就给多大的线程池
缺点:如果线程无限增长,会导致内存溢出
2、newFixedThreadPool //优点:创建一个固定大小的线程池,超出的任务会在队列中等待
缺点:难以扩展,不支持自定义 拒绝策略
3、newScheduledThreadPool //优点:支持周期性的执行任务,固定大小
缺点: 单线程执行,一旦一个任务失败会影响其他任务执行
4、newSingleThreadExecutor //优点:能够顺序执行任务
缺点:不明白怎么设计的,可以使用队列来执行
5、ThreadPoolExecutor //优点:上面所有的优点
使用newFixedThreadPool创建一个固定大小的线程池:
ExecutorService fixPool =Executors.newFixedThreadPool(5);
for (int i=0;i<20;i++) {
fixPool.execute(new MyRunnable()); //execute:执行一个任务
{
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
});
}
fixPool.shutdown(); //中断线程池,没有任务执行时要中断线程池
使用ThreadPoolExecutor创建一个的核心池:
ThreadPoolExecutor pool = new ThreadPoolExecutor(3, 5, 5, TimeUnit.SECONDS,new LinkedBlockingDeque<Runnable>(20),new ThreadPoolExecutor.AbortPolicy());
pool.execute(new MyRunnable()); //将一个实现线程接口的任务类交给核心池
核心池类的参数:
corePoolSize(3):核心池的大小
maximumPoolSize(5):池内线程的最大值
keepAliveTime(5):线程的存活时间
Unit(TimeUnit.SECONDS): 上述时间的单位
BlockingQueue(new LinkedBlockingDeque<Runnable>(20)):队列,如果有任务需要等待线程执行,就会临时存储在这个队列中,(20:队列容量)
RejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()):拒绝策略
拒绝策略:
1、Abortpolicy:丢弃任务并抛出异常
2、Discardpolicy:丢弃任务,但不抛出异常
3、Discardoldestpollicy:丢弃队列最前面的任务,尝试重新
4、CallerRunsPolicy:谁把任务给我,谁来执行
Java_多线程2_线程池的更多相关文章
- C#多线程之线程池篇3
在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...
- C#多线程之线程池篇2
在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...
- C#多线程之线程池篇1
在C#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...
- 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法
[源码下载] 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法 作者:webabcd 介绍重新想象 Wi ...
- ExecutorService 建立一个多线程的线程池的步骤
ExecutorService 建立一个多线程的线程池的步骤: 线程池的作用: 线程池功能是限制在系统中运行的线程数. 依据系统的环境情况,能够自己主动或手动设置线程数量.达到执行的最佳效果:少了浪费 ...
- C#多线程和线程池问题
static void Main(string[] args) { Thread threadA = new Thread(ThreadMethod); //执行的必须是无返回值的方法 threadA ...
- Qt多线程-QThreadPool线程池与QRunnable
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt多线程-QThreadPool线程池与QRunnable 本文地址:https:/ ...
- Java基础教程:多线程基础——线程池
Java基础教程:多线程基础——线程池 线程池 在正常负载的情况瞎,通过为每一个请求创建一个新的线程来提供服务,从而实现更高的响应性. new Thread(runnable).start() 在生产 ...
- Qt中的多线程与线程池浅析+实例
1. Qt中的多线程与线程池 今天学习了Qt中的多线程和线程池,特写这篇博客来记录一下 2. 多线程 2.1 线程类 QThread Qt 中提供了一个线程类,通过这个类就可以创建子线程了,Qt 中一 ...
随机推荐
- 利用WKWebView实现js与OC交互注意事项
最近在写一些关于wkwebview的一些代码,发现了几点心得,记录一下. 1.js调用OC 我是利用wkwebview进行的开发实现,主要代码有三部分 1.向config注入OC对象 [config. ...
- rabbitmq的延迟消息队列实现
第一部分:延迟消息的实现原理和知识点 使用RabbitMQ来实现延迟任务必须先了解RabbitMQ的两个概念:消息的TTL和死信Exchange,通过这两者的组合来实现上述需求. 消息的TTL(Tim ...
- 利率计算v4.0--测试--软件工程
利率计算v4.0--测试 package Test; import Model.Interest; import Service.CompoundInterestService; import Ser ...
- Nginx 出现413 Request Entity Too Large 错误解决方法(上传大小限制)
| 时间:2013-09-05 20:19:14 | 阅读数:485075 [导读] Nginx出现的413 Request Entity Too Large错误,这个错误一般在上传文件的时候出现,打 ...
- [SoapUI]怎样配置SoapUI运行的不同环境,并在Jenkins上面通过命令调用不用的环境
配置SoapUI运行的不同环境 Groovy 脚本来控制environment 在Jenkins上面通过命令调用不用的环境 http://www.soapui.org/Test-Automation/ ...
- 玩转Sketch,不容错过的5大实用插件推荐
在之前的文章中,笔者为大家介绍了Sketch 的入门教程.实用技巧和资源集锦,相信大家对Sketch已经有了初步的了解和认识.除了基础的矢量设计功能以外,插件更是让Sketch保持强大的独门秘籍.Sk ...
- web端跨域调用webapi(转)
在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案. 通过自己的研究以及在网上看了一些大神的博客,写了一个Demo 首先新建一个webapi的程序,如下图所示: 由于微软已 ...
- Myeclipse的webservice本地监听设置(一个简陋的代理)
(1) 首先打开Myeclipse,然后选择window--->show view ---->other (2)搜索tcp,然后找到如图的样式 (3)选中,点击ok (4)弹出下图界面 ( ...
- 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用
Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...
- 史上最详细的Hadoop环境搭建(转)
转载的文章,请告知侵删.本人只是做个记录,以免以后找不到. 前言 Hadoop在大数据技术体系中的地位至关重要,Hadoop是大数据技术的基础,对Hadoop基础知识的掌握的扎实程度,会决定在大数据技 ...