`
donald3003a
  • 浏览: 65788 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
  • 淼淼E馒头: 这举列有点不恰当啊。。电影人和不同类型的电影。是两个不同概念 ...
    合成模式

多线程经验分享

阅读更多
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"和"精易模块"等资源,开发者可以获得丰富的实践经验和工具支持。"鱼刺类"的类库则进一步简化了多线程编程的过程,使得易语言...

    多线程雷电游戏

    通常,这样的博客文章会包含作者对多线程游戏开发的见解、代码示例或者项目经验分享。在实际的多线程游戏开发中,开发者需要考虑线程间的同步与通信、资源竞争、死锁等问题,以及如何合理分配任务到不同的线程以实现...

    Java多线程编程经验谈

    关于编写多线程的经验分享,一种有效的方法是使用事件监听模式。例如,可以定义一个监听器接口,包含一个或多个同步方法,如`synData()`。线程之间通过注册监听器来进行通信。当需要同步数据时,线程调用监听器的...

    多线程并发学习书籍

    6. **《java并发编程阿里巴巴-梁飞.pptx》**:这可能是一份来自阿里巴巴专家的PPT教程,专门针对Java并发编程,内容可能包括阿里巴巴内部的并发编程规范、最佳实践,以及解决大型分布式系统中并发问题的经验分享。...

    Win32 多线程程序设计_纯文本转成的PDF

    10. **最佳实践**:侯捷先生会分享他的编程经验和技巧,指导读者如何写出高效、稳定的多线程程序。 总的来说,《Win32多线程程序设计》是一本深入探讨Windows平台上多线程编程的权威指南,无论你是初学者还是经验...

    文件复制——多线程

    在IT行业中,多线程是提高程序执行效率和并发能力的重要技术之一,尤其在处理大量数据,如文件复制时,其优势更为明显。...如果需要深入了解,可以参考给定的博客链接,那里可能有更详细的代码示例和实践经验分享。

    高效linux的多线程编程经验12条总结

    #### 经验分享 1. **尽量设置recursive属性以初始化Linux的互斥变量** - **原因**:Linux下的互斥锁默认情况下不允许同一线程对其多次加锁,这可能导致死锁情况的发生。相比之下,Windows平台的互斥锁支持递归...

    Linux 的多线程编程的高效开发经验

    ### Linux的多线程编程高效开发经验解析 在Linux环境下,多线程编程是一项关键技能,尤其对于服务器软件开发而言。...希望本文的经验分享能够帮助广大开发者在Linux平台上更高效地进行多线程编程。

    Intel多线程程序开发指南1

    总之,《Intel多线程程序开发指南》是一部非常全面且实用的多线程编程指南,它不仅涵盖了多线程编程的核心技术和理论知识,而且还提供了丰富的实践经验和工具资源,是从事多线程开发的软件工程师不可或缺的参考资料...

    VC++多线程开发技术讲解电子书

    本书汇聚了众多专业开发者在论坛上的精华分享,旨在为读者提供一套完整、实用的多线程开发指南。下面将详细阐述这本书中可能涵盖的重要知识点。 1. **多线程基础**:首先,书中会介绍多线程的基本概念,包括线程的...

    基于ROS多线程订阅多个话题并且发布话题C++源码(含详细注释).zip

    基于ROS多线程订阅多个话题并且发布话题C++源码(含详细注释).zip基于ROS多线程订阅多个话题并且发布话题C++源码(含详细注释).zip基于ROS多线程订阅多个话题并且发布话题C++源码(含详细注释).zip基于ROS多线程订阅多...

    基础技术部牛路《Java多线程入阶分享》纯干货

    Java多线程入阶干货分享 1.使用线程的经验:设置名称、响应中断、使用ThreadLocal 2.Executor:ExecutorService和Future 3.阻塞队列:put和take、offer和poll、drainTo 4.线程间通信:lock、condition、wait、notify...

    多线程爬取高清图1.0(包含单线程)

    这种社区支持对于初学者来说非常重要,因为他们可以在这里提出问题、分享经验并获取反馈。 最后,“使用说明.txt”提供了关于如何运行和使用这两个爬虫程序的指导。通过阅读这个文件,用户可以了解如何启动爬虫、...

    Multi-ThreadTest.rar_win32 多线程

    在IT领域,多线程是程序设计中的一个重要概念,尤其在Windows系统环境下,掌握Win32 API进行多线程...对于初学者来说,这是一个很好的起点,而对于经验丰富的开发者,这则是一个回顾和验证Win32多线程技术的实用案例。

    用多线程同步方法解决生产者-消费者问题

    - 分享从项目中学到的知识和经验,可能包括多线程编程的技巧、并发控制的理解以及调试多线程程序的策略。 这个项目不仅展示了多线程同步的基本概念,也锻炼了开发者在实际环境中解决并发问题的能力。通过这样的...

    计算机科学+并发编程+多线程+高性能处理

    无论是开发者、计算机专业学生,还是对高并发多线程技术感兴趣的初学者,都能从中获得丰富的知识和实践经验。 该代码适用于各种需要高并发、多线程处理的应用场景,如大型企业级应用、电商平台、金融系统等。通过...

    java自定义线程模型处理方法分享

    本文将深入探讨如何在Java中构建自定义线程模型,并分享一些实践经验。 首先,我们要明白为什么要自定义线程模型。在游戏开发中,线程的划分和管理至关重要,因为它直接影响游戏的性能和稳定性。例如,在MMORPG或...

    一个多线程后台扫描的程序和源代码.rar_Delphi7 多线程_delphi 后台_site:en.pudn.com_后台扫描

    标题中的“一个多线程后台扫描的程序和源代码.rar”表明这是一个使用Delphi 7开发的...通过这个项目,开发者不仅可以提升Delphi 7的编程技巧,还能深入理解多线程编程和后台任务的实现,为今后的项目开发积累宝贵经验。

    CnComm 多线程串口通讯库

    8. **社区支持**:作为一个成熟的产品,CnComm可能拥有活跃的开发者社区,用户可以通过论坛、邮件列表或在线问答平台获取帮助,分享经验和解决问题。 9. **扩展性与定制化**:CnComm库的设计应允许开发者根据项目...

    经典java编程经验分享

    多线程是并发编程的基础,Java提供了Thread类和Runnable接口来实现多线程。学习如何使用synchronized关键字进行同步控制,理解死锁和活锁的概念,以及如何使用Lock接口和Condition来精细化控制线程,都是提升并发...

Global site tag (gtag.js) - Google Analytics