1、ThreadLocal 简单介绍
ThreadLocal 可以允许用户在一个线程中共享变量
ThreadLocal 为解决多线程程序的并发问题提供了一种新的思路
它的具体实现是每一个线程都新建一个ThreadLocalMap对象,KEY为线程,VALUE为需要共享的值。而不是共享一个静态MAP对象来实现,这样的好处方便GC回收。
2、ThreadPoolExecutor 简单介绍
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
corePoolSize 核心线程池大小
maximumPoolSize 最大线程池大小
keepAliveTime 线程池中超过corePoolSize数目的空闲线程最大存活时间;可以allowCoreThreadTimeOut(true)使得核心线程有效时间
TimeUnit keepAliveTime时间单位
workQueue 阻塞任务队列
threadFactory 新建线程工厂
RejectedExecutionHandler 当提交任务数超过maxmumPoolSize+workQueue之和时,任务会交给RejectedExecutionHandler来处理;
1. 当线程池小于corePoolSize时,新提交任务将创建一个新线程执行任务,即使此时线程池中存在空闲线程。
2. 当线程池达到corePoolSize时,新提交任务将被放入workQueue中,等待线程池中任务调度执行
3. 当workQueue已满,且maximumPoolSize>corePoolSize时,新提交任务会创建新线程执行任务
4. 当提交任务数超过maximumPoolSize时,新提交任务由RejectedExecutionHandler处理
5. 当线程池中超过corePoolSize线程,空闲时间达到keepAliveTime时,关闭空闲线程
6. 当设置allowCoreThreadTimeOut(true)时,线程池中corePoolSize线程空闲时间达到keepAliveTime也将关闭
unit可选的参数为java.util.concurrent.TimeUnit中的几个静态属性:
NANOSECONDS、
MICROSECONDS、
MILLISECONDS、
SECONDS。
handler有四个选择:
ThreadPoolExecutor.AbortPolicy()
抛出java.util.concurrent.RejectedExecutionException异常
ThreadPoolExecutor.CallerRunsPolicy()
当抛出RejectedExecutionException异常时,会调用rejectedExecution方法
(如果主线程没有关闭,则主线程调用run方法,源码如下
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
if (!e.isShutdown()) {
r.run();
}
}
)
ThreadPoolExecutor.DiscardOldestPolicy()
抛弃旧的任务
ThreadPoolExecutor.DiscardPolicy()
抛弃当前的任务
分享到:
相关推荐
基于ROS多线程订阅多个话题并且发布话题C++源码(含详细注释).zip基于ROS多线程订阅多个话题并且发布话题C++源码(含详细注释).zip基于ROS多线程订阅多个话题并且发布话题C++源码(含详细注释).zip基于ROS多线程订阅多...
Java多线程入阶干货分享 1.使用线程的经验:设置名称、响应中断、使用ThreadLocal 2.Executor:ExecutorService和Future 3.阻塞队列:put和take、offer和poll、drainTo 4.线程间通信:lock、condition、wait、notify...
无论是开发者、计算机专业学生,还是对高并发多线程技术感兴趣的初学者,都能从中获得丰富的知识和实践经验。 该代码适用于各种需要高并发、多线程处理的应用场景,如大型企业级应用、电商平台、金融系统等。通过...
本资源适拥有丰富的java应用知识,但是缺少线程及多线程应用的经验。希望能够与大家分享该文档,也希望大家喜欢。
基于Qt的C++项目,实现了网盘的基础功能,包括注册登录、好友系统、私聊群聊、文件操作、分享文件等功能,实现了网络通信、多线程等。 QT,C++使用技巧,实战应用开发小系统参考资料,源码参考。 详细介绍了一些Qt...
本文给大家总结分享了下个人关于java处理自定义线程模型的一些经验和处理方法,有需要的小伙伴可以参考下
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
Python合法网页爬虫工具项目分享 内容概览: 这个分享包涵了我开发的Python爬虫工具项目,主要用于合法爬取某些网页信息。以下是主要内容: 源代码:包括Python代码和相关脚本。这些代码展示了如何使用Python进行...
Python合法网页爬虫工具项目分享 内容概览: 这个分享包涵了我开发的Python爬虫工具项目,主要用于合法爬取某些网页信息。以下是主要内容: 源代码:包括Python代码和相关脚本。这些代码展示了如何使用Python进行...
去掉了celery,因为感觉就两个定时任务,完全没必要用celery,schedule守护线程可能是个更好更轻量的选择 对项目目录做了重大调整,增加了handlers和common,api目录,对程序的职责做了更明确的划分 网络或磁盘IO...
Python合法网页爬虫工具项目分享 内容概览: 这个分享包涵了我开发的Python爬虫工具项目,主要用于合法爬取某些网页信息。以下是主要内容: 源代码:包括Python代码和相关脚本。这些代码展示了如何使用Python进行...
该资源是一个包含多个Java面试相关文档...面试经验分享:这些文档包含了一些面试者的个人经验分享和建议,涵盖了面试技巧、项目经历展示、自我介绍等方面。通过阅读这些分享,您可以获取一些宝贵的面试准备和应对技巧。
多线程,进程,泛型,面试笔试经验,英语介绍...等等
主题简介:本演讲将结合凡客的Android客户端应用实例,详细介绍凡客应用的实现架构,阐述分析电商应用中的多线程的合理使用、电商应用中因商品图片加载过多引发的内存溢出的优化处理等技术问题。演讲提纲涉及:(1)...
介绍了Java异常区分和处理的一些经验分享,主要是异常选择和使用中的一些误区总结与归纳,具有一定参考价值,需要的朋友可以了解下。
if (write_pid() ) //避免同时有多个该程序在运行 return -1; if (pipe(fd1) ) { perror("pipe failed"); exit(-1); } if (s_pipe(fd2) ) { perror("pipe failed"); exit(-1); } int port = atoi(argv...
爬虫系统概述和基本原理 爬虫系统的定义和作用 爬虫系统的基本工作流程和组成部分 常见的爬虫系统应用场景和挑战 爬虫系统架构设计 分布式爬虫系统架构模式 爬取策略和调度器设计 ...爬虫项目开发流程和实践经验分享
爬虫系统概述和基本原理 爬虫系统的定义和作用 爬虫系统的基本工作流程和组成部分 常见的爬虫系统应用场景和挑战 爬虫系统架构设计 分布式爬虫系统架构模式 爬取策略和调度器设计 ...爬虫项目开发流程和实践经验分享
爬虫系统概述和基本原理 爬虫系统的定义和作用 爬虫系统的基本工作流程和组成部分 常见的爬虫系统应用场景和挑战 爬虫系统架构设计 分布式爬虫系统架构模式 爬取策略和调度器设计 ...爬虫项目开发流程和实践经验分享
爬虫系统概述和基本原理 爬虫系统的定义和作用 爬虫系统的基本工作流程和组成部分 常见的爬虫系统应用场景和挑战 爬虫系统架构设计 分布式爬虫系统架构模式 爬取策略和调度器设计 ...爬虫项目开发流程和实践经验分享