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()
抛弃当前的任务
分享到:
相关推荐
综上所述,易语言的多线程编程涉及了从基本概念到具体实现的多个层次,通过"多线程模板.e"和"精易模块"等资源,开发者可以获得丰富的实践经验和工具支持。"鱼刺类"的类库则进一步简化了多线程编程的过程,使得易语言...
通常,这样的博客文章会包含作者对多线程游戏开发的见解、代码示例或者项目经验分享。在实际的多线程游戏开发中,开发者需要考虑线程间的同步与通信、资源竞争、死锁等问题,以及如何合理分配任务到不同的线程以实现...
关于编写多线程的经验分享,一种有效的方法是使用事件监听模式。例如,可以定义一个监听器接口,包含一个或多个同步方法,如`synData()`。线程之间通过注册监听器来进行通信。当需要同步数据时,线程调用监听器的...
6. **《java并发编程阿里巴巴-梁飞.pptx》**:这可能是一份来自阿里巴巴专家的PPT教程,专门针对Java并发编程,内容可能包括阿里巴巴内部的并发编程规范、最佳实践,以及解决大型分布式系统中并发问题的经验分享。...
10. **最佳实践**:侯捷先生会分享他的编程经验和技巧,指导读者如何写出高效、稳定的多线程程序。 总的来说,《Win32多线程程序设计》是一本深入探讨Windows平台上多线程编程的权威指南,无论你是初学者还是经验...
在IT行业中,多线程是提高程序执行效率和并发能力的重要技术之一,尤其在处理大量数据,如文件复制时,其优势更为明显。...如果需要深入了解,可以参考给定的博客链接,那里可能有更详细的代码示例和实践经验分享。
#### 经验分享 1. **尽量设置recursive属性以初始化Linux的互斥变量** - **原因**:Linux下的互斥锁默认情况下不允许同一线程对其多次加锁,这可能导致死锁情况的发生。相比之下,Windows平台的互斥锁支持递归...
### Linux的多线程编程高效开发经验解析 在Linux环境下,多线程编程是一项关键技能,尤其对于服务器软件开发而言。...希望本文的经验分享能够帮助广大开发者在Linux平台上更高效地进行多线程编程。
总之,《Intel多线程程序开发指南》是一部非常全面且实用的多线程编程指南,它不仅涵盖了多线程编程的核心技术和理论知识,而且还提供了丰富的实践经验和工具资源,是从事多线程开发的软件工程师不可或缺的参考资料...
本书汇聚了众多专业开发者在论坛上的精华分享,旨在为读者提供一套完整、实用的多线程开发指南。下面将详细阐述这本书中可能涵盖的重要知识点。 1. **多线程基础**:首先,书中会介绍多线程的基本概念,包括线程的...
基于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...
这种社区支持对于初学者来说非常重要,因为他们可以在这里提出问题、分享经验并获取反馈。 最后,“使用说明.txt”提供了关于如何运行和使用这两个爬虫程序的指导。通过阅读这个文件,用户可以了解如何启动爬虫、...
在IT领域,多线程是程序设计中的一个重要概念,尤其在Windows系统环境下,掌握Win32 API进行多线程...对于初学者来说,这是一个很好的起点,而对于经验丰富的开发者,这则是一个回顾和验证Win32多线程技术的实用案例。
- 分享从项目中学到的知识和经验,可能包括多线程编程的技巧、并发控制的理解以及调试多线程程序的策略。 这个项目不仅展示了多线程同步的基本概念,也锻炼了开发者在实际环境中解决并发问题的能力。通过这样的...
无论是开发者、计算机专业学生,还是对高并发多线程技术感兴趣的初学者,都能从中获得丰富的知识和实践经验。 该代码适用于各种需要高并发、多线程处理的应用场景,如大型企业级应用、电商平台、金融系统等。通过...
本文将深入探讨如何在Java中构建自定义线程模型,并分享一些实践经验。 首先,我们要明白为什么要自定义线程模型。在游戏开发中,线程的划分和管理至关重要,因为它直接影响游戏的性能和稳定性。例如,在MMORPG或...
标题中的“一个多线程后台扫描的程序和源代码.rar”表明这是一个使用Delphi 7开发的...通过这个项目,开发者不仅可以提升Delphi 7的编程技巧,还能深入理解多线程编程和后台任务的实现,为今后的项目开发积累宝贵经验。
多线程是并发编程的基础,Java提供了Thread类和Runnable接口来实现多线程。学习如何使用synchronized关键字进行同步控制,理解死锁和活锁的概念,以及如何使用Lock接口和Condition来精细化控制线程,都是提升并发...
侯杰是一位知名的Java技术专家,他深入研究并分享了关于多线程的实践经验和实例源码,这对于开发者来说是极其宝贵的资源。 在多线程编程中,我们首先需要理解线程的基本概念。线程是操作系统分配CPU时间的基本单位...