`
bugyun
  • 浏览: 540704 次
社区版块
存档分类
最新评论

JAVA线程池原理以及几种线程池类型介绍

阅读更多

转自:http://xtu-xiaoxin.iteye.com/blog/647580

 

在什么情况下使用线程池? 

    1.单个任务处理的时间比较短 
    2.将需处理的任务的数量大 

    使用线程池的好处: 

    1.减少在创建和销毁线程上所花的时间以及系统资源的开销 
    2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。 

线程池工作原理:http://www.ibm.com/developerworks/cn/java/j-jtp0730/ 
该文章里有个例子,简单的描述了线程池的内部实现,建议根据里面的例子来了解JAVA 线程池的原理。同时,里面还详细描述了使用线程池存在的优点和弊端,大家可以研究下,我觉得是篇非常好的文章。 

    JDK自带线程池总类介绍介绍: 

    1、newFixedThreadPool创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。 

    2、newCachedThreadPool创建一个可缓存的线程池。这种类型的线程池特点是: 
    1).工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。 
    2).如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。 

    3、newSingleThreadExecutor创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,如果这个线程异常结束,会有另一个取代它,保证顺序执行(我觉得这点是它的特色)。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的 。 

    4、newScheduleThreadPool创建一个定长的线程池,而且支持定时的以及周期性的任务执行,类似于Timer。(这种线程池原理暂还没完全了解透彻) 

    总结: 一.FixedThreadPool是一个典型且优秀的线程池,它具有线程池提高程序效率和节省创建线程时所耗的开销的优点。但是,在线程池空闲时,即线程池中没有可运行任务时,它不会释放工作线程,还会占用一定的系统资源。 

        二.CachedThreadPool的特点就是在线程池空闲时,即线程池中没有可运行任务时,它会释放工作线程,从而释放工作线程所占用的资源。但是,但当出现新任务时,又要创建一新的工作线程,又要一定的系统开销。并且,在使用CachedThreadPool时,一定要注意控制任务的数量,否则,由于大量线程同时运行,很有会造成系统瘫痪。 

        三.就是向各位请教一下,请问各位使用过SingleThreadExecutor吗?它一般使用在哪些地方? 

    刚研究了一下线程池,以上为个人学习过程以及观点,请勿见笑!下章,将分析一下JDK自带线程池(ThreadPoolExecutor.java)源码,如果感兴趣,可看看。顺便帮忙踩踩,呵呵!

分享到:
评论

相关推荐

    JAVA线程池原理以及几种线程池类型介绍.doc

    JAVA线程池原理以及几种线程池类型介绍

    Java 线程池.docx

    资源回答:为什么需要线程池?常见的线程池有哪几个种?线程池的核心参数有哪几个?线程池的核心原理?线程池的拒绝策略。属于高频面试题

    java多线程编程

    java多线程设计模式,附源码中文教程,java并发核心编程,JAVA线程池原理以及几种线程池类型介绍

    java多线程、并发及线程池介绍收藏的几篇文档

    里面是自己收藏的几篇关于线程的文档资料,大家可以看看哈

    Java中的线程与线程池.pptx

    首先,阐述了为什么需要线程、Java中实现线程的几种方式,线程的多种状态切换;然后,介绍了为什么需要线程池,JDK自带的线程池实现方式ThreadPoolExecutor的使用及其原理,最后强调ThreadPoolExecutor应用的注意点...

    Java基础篇:Executor框架.pdf

    该文档详细记录了Executor框架结构、使用示意图、ThreadPoolExecutor使用示例、线程池原理分析、几种常见线程池(FixedThreadPool、SingleThreadExecutor、CachedThreadPool)的详解以及线程池大小确定等内容

    高级开发并发面试题和答案.pdf

    线程有哪几种创建方式; Semaphore+CountDownLatch+CyclicBarrier区别; 描述一下Java线程的生命周期,线程状态; 线程之间的通信方式; 描述一下notify和notifyAll区别; synchronized关键字加在静态方法和实例方法...

    java面试题.docx

    企业常见java面试题,java基础,java进阶 JDK 和 JRE 有什么区别? == 和 equals 的区别是什么? 两个对象的 hashCode()相同,则...创建线程池有哪几种方式? 在 java 程序中怎么保证多线程的运行安全? 什么是死锁?

    Java常见面试题208道.docx

    15.java 中 IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、容器 18.java 容器都有哪些? 19.Collection 和 Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21....

    JAVA面试题最全集

    76.EJB有哪几种?区别是什么? 77.JavaBean与EJB有什么区别? 78.软件开发生命周期有哪几个阶段? 79.软件开发有哪些因素? 80.软件开发中如何进行版本控制? 81.UML中,类视图如何表示类中的继承与聚合? 82.客户端...

    史上最全java面试,103项重点知识,带目录

    15. java 中 IO 流分为几种? 7 16. BIO、NIO、AIO 有什么区别? 7 17. Files的常用方法都有哪些? 8 二、容器 8 18. java 容器都有哪些? 8 19. Collection 和 Collections 有什么区别? 9 20. List、Set、Map 之间...

    leetcode下载-JavaTopic:Java面试题总结

    Java线程池初始化的几个核心参数及其作用 Java并发锁synchronized、reentractlock的用法 HashMap数据结构及原理 ConcurrentHashMap数据结构及原理,分段锁机制 NIO、BIO相关 Java多线程篇: 线程池的核心参数及用法...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【基础】Java 中定义常量的几种方法 25 【基础】什么时候使用字节流?什么时候用字符流? 26 【基础】GBK与UTF-8的区别 26 【基础】static、final、const的区别 26 final: 26 static: 27 【基础】如何实现对象克隆?...

    java-server-interview-questions:java服务端面试题整理

    动态代理的几种方式 HashMap的并发问题 了解LinkedHashMap的应用吗 反射的原理,反射创建类实例的三种方式是什么? cloneable接口实现原理,浅拷贝or深拷贝 Java NIO使用 hashtable和hashmap的区别及实现原理,...

    leetcode下载-studyday:记得我

    不推荐使用Excutors工具类去创建默认的几种线程池。会有OOM风险...要么核心线程树可能过多要么 工作队列没有限制。 推荐使用ThreadPoolExecutor构造方法自己定制创建。设置适合的核心数,选择合适的阻塞队列类型以及...

    java8集合源码分析-Petal:面试复习及面试经验

    Java并发:三种锁,validate,synchronized,lock,CAS,线程池(原理和拒绝策略),多线程工具类 操作系统:死锁条件与避免,页式存储管理,页面置换算法,线程与进程区别,假脱机,存储模型 数据库:写SQL,几个...

    java版飞机大战源码-java-club:Java程序员所需要掌握的核心知识都在这里。。。。alittledaily~

    java版飞机大战源码 行走在路上 学习是一条时而郁郁寡欢,时而开环大笑的路,加油。 如果我们通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。 在工作中发现我身边的人真的...

    leetcode题库-sword_at_offer:Java、Python、算法、Spring等

    对象的几种引用类型 线程 线程基础 原理 线程池 并发基础 并发的三大性质(原子性,可见性,顺序性) volatile / synchronized / CAS / Lock AQS 原子类 java.util.concurrent(JUC):CountDownLatch / Semaphore / ...

    汪文君高并发编程实战视频资源全集

     高并发编程第三阶段12讲 sun.misc.Unsafe介绍以及几种Counter方案性能对比.mp4  高并发编程第三阶段13讲 一个JNI程序的编写,通过Java去调用C,C++程序.mp4  高并发编程第三阶段14讲 Unsafe中的方法使用,一半是...

Global site tag (gtag.js) - Google Analytics