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 中一 ...
随机推荐
- indexes和indices的区别
indexes和indices的区别是: indexes在美国.加拿大等国的英语里比较常见.但indices盛行于除北美国家以外的英语里. indices一般在数学,金融和相关领域使用,而indexe ...
- sqlconnection dispose()与close()的区别
区别: IDispose接口可以通过Using关键字实现使用后立刻销毁,因此,Dispose适合只在方法中调用一次SqlConnection对象,而Close更适合SqlConnection在关闭后可 ...
- JavaScript RegExp.test() 方法
定义和用法: test() 方法用于检测一个字符串是否匹配某个模式. 语法: RegExpObject.test(string); RegExpObject:正则表达式; string:必须参数,要检 ...
- 八种主流NoSQL数据库系统对比(转)
出处:http://database.51cto.com/art/201109/293029.htm 虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破.这只是时间问题:被迫 ...
- 使用js/jquery查找iframe中的
原生js 一.在iframe的父窗口中获取iframe中的元素: js代码 格式: window.frames["iframe的name值"].document.getEleme ...
- Windows与Linux相互远程桌面连接
对于远程桌面连接Linux,大家可能会第一时间想到使用VNC,,远程桌面Windows,大家第一时间会想到使用Windows自带的远程桌面.那么有没有办法,使得在Linux中可以远程Windo ...
- Linux 基础教程 28-nc命令
nc nc命名netcat,直译为网络猫.在CentOS 7查看帮助的解释如下所示: ncat - Concatenate and redirect sockets 翻译过来就是可以连接和重定 ...
- Bootstrap导航栏
导航栏: <div id="menu-nav" class="navbar navbar-default navbar-inverse navbar-fixed-t ...
- How To Make A DFF Read Only Through Form Personalisations? (文档 ID 1289789.1)
In this Document Goal Solution References APPLIES TO: Oracle Application Object Library - Vers ...
- Linux Guard Service - 守护进程再次分裂子进程
当系统区内存不能再申请新进程的时候申请会失败 在512MB内存下最多分配的子进程数 3331 [root@localhost 05]# ./test5-1 50000 expect 50000 sub ...