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 中一 ...
随机推荐
- 「红米 2A 标准版」闪屏救砖、更正官方线刷救砖工具
问题描述 用 ES 浏览器 卸载了内置软件后重启无法开机,停在 MI android 界面并出现屏幕忽明忽暗的现象,无法进入系统. 漫长的救砖探索,直白的解决方案 总体来说,林林总总下了六个 G 的教 ...
- 单词的添加与查找 · Add and Search Word
[抄题]: 设计一个包含下面两个操作的数据结构:addWord(word), search(word) addWord(word)会在数据结构中添加一个单词.而search(word)则支持普通的单词 ...
- java 框架收藏
一.java 异步非阻塞编程框架 1.Spring Webflux 2.Vert.x 3.Ratpack 4.smart-socket 国产异步框架 二.微服务框架 1.Jboot :专为大型分布式项 ...
- [OS] 修改屏幕分辨率(用Remote Desktop Connection 或者 用工具:Remote Desktop Connection Manager)
用Remote Desktop Connection Remote Desktop Connection Manager
- 文字如何实现完美UI?文本排版设计告诉你
一部手机,电量充足,网络通畅,就足以让我们打发一天的时光,尽情沉浸在手机时代的缤纷世界里.这个信息资源无穷尽的手机网络世界,是设计师和开发者们在不停的探索中一路一步精心打造.如何进一步美化这个世界,优 ...
- JavaScript 语法总结3
1. 数组初始化可以跳着来 var s = [1,2,,,,6]; // 中间省略的元素为undefined 2. 函数定义表达式: var f = function(args){ return ...
- Page Object页面设计模式核心要点
Page Object,页面对象.一种设计模式,实施selenium的最佳实践,体现了web应用与页面显示之间的关系.为什么需要Page Object?测试代码维护的需要:减少代码的编码量,减少代 ...
- JMS规范简介
一.JMS规范 Java消息服务定义: Java消息服务(Java Message Service)即JMS,是一个Java平台中面向消息中间件的API,用于在两个应用程序之间或分布式系统中发送/接受 ...
- java 文件中 定义一个字符串,它的默认编码是什么?
.java 文件的编码就是 String 字符串的编码 File 文件的编码就是 文件内容的编码 request 的设置的编码就是inputstream 的编码 jvm 的默认编码(the defau ...
- 何时使用[self release]
这样的语句 [self release]; 乍看上去让人很困惑. 从release方法本身的作用上来说,就是给self的引用技术减一,就像release对其他对象所做的一样. 一般来说,唯一用到, ...