`
sheungxin
  • 浏览: 105464 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java线程池回顾

    博客分类:
  • Java
阅读更多
  • 线程池相关类
ExecutorService真正的线程池接口
ScheduledExecutorService能和Timer/TimerTask类似,解决那些需要任务重复执行的问题
ThreadPoolExecutorExecutorService的默认实现
ScheduledThreadPoolExecutor继承ThreadPoolExecutor的ScheduledExecutorService接口实现,周期性任务调度的类实现

  • ThreadPoolExecutor
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, 
TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,
RejectedExecutionHandler handler)
corePoolSize:核心池的大小
maximumPoolSize:池中允许的最大线程数
keepAliveTime:当线程数大于核心池的大小,终止空闲线程等待新任务的最长时间
unit:keepAliveTime参数的时间单位
workQueue:执行前用于保持任务的队列
threadFactory:线程创建工厂
handler:由于超出线程范围和队列容量而使执行被阻塞时,表示拒绝处理的策略
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常
ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常
ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务 

  • 默认的四种线程池
Executors是一个工具类,提供一些静态工厂,生成一些常用较优的线程池(建议使用,不用了解线程池原理)

newSingleThreadExecutor:单线程的线程池,串行执行所有任务,只有当前线程异常结束时才会新的线程来替代它。
public static ExecutorService newSingleThreadExecutor() {   
	return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>()));   
}
newFixedThreadPool:固定大小的线程池。根据任务量,逐渐增加线程数,直到线程池最大值保持不变。只有线程异常结束时才会新的线程来补充。
Runtime.getRuntime().availableProcessors()
public static ExecutorService newFixedThreadPool(int nThreads) {   
	return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());   
}
newCachedThreadPool:可缓存的线程池,可以理解为可复用的线程池,当线程处于空闲状态(60秒未执行任务)执行回收,有需要再创建新的线程。该线程池未做大小限制,依赖JVM可以创建的最大线程数(默认线程大小1024k)。
public static ExecutorService newCachedThreadPool() {   
	return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>());   
}
newScheduledThreadPool:创建一个定长线程池,此线程池支持定时以及周期性执行任务的需求

  • 相关队列
SynchronousQueue:没有数据缓冲的BlockingQueue,每个插入操作必须等待另一个线程的对应移除操作
LinkedBlockingQueue:基于链表的先进先出队列,如果创建时没有指定此队列大小,则默认为Integer.MAX_VALUE

  • 参考文档
引用

以上两篇文章讲的很详细,感谢作者!
0
0
分享到:
评论

相关推荐

    自定义实现Java线程池

    在深入探讨自定义Java线程池之前,我们先简要回顾一下线程池的基本概念及其重要性。线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池可以有效控制运行的线程数量...

    Java经典编程50道

    9. Class36.java:可能关于线程池的使用,如`ExecutorService`和`ThreadPoolExecutor`,理解线程池的工作原理和优化策略。 10. Class11.java:可能讨论设计模式,如单例模式、工厂模式、观察者模式等,这些都是解决...

    Java并发编程实践(java concurrency in practice)pdf (java多线程总结.ppt)

    配合`JAVA多线程总结.ppt`,你可以得到一个更直观和简洁的概览,快速回顾和掌握上述关键知识点。虽然中文版翻译可能存在不足,但原版英文书籍通常能更准确地传达作者的意图和细节,值得深入阅读。

    Tank版2016Java

    【标题】"Tank版2016Java"指的是一个特定版本...总的来说,“Tank版2016Java”可能会涵盖上述知识点,提供关于Java 8的使用、Spring框架的应用、多线程编程的最佳实践等,对于学习和回顾2016年Java开发具有很高的价值。

    java深度历险+深入java虚拟机

    1. **Java基础**:虽然不是初学者入门教程,但书中会回顾Java的基础,如语法、类、对象、接口、异常处理等,为深入探讨打下坚实基础。 2. **面向对象设计**:深入讨论了如何利用Java进行高效、可维护的面向对象设计...

    java源码大全

    - **线程池**:ExecutorService接口和ThreadPoolExecutor类提供了线程池管理,可以提高系统效率并简化线程管理。 - **并发工具类**:如Semaphore(信号量)、CyclicBarrier(回环栅栏)、CountDownLatch(倒计时 ...

    JAVA学习课件PPT版

    这部分内容可能会讲解Thread类的使用、实现Runnable接口、线程同步机制(如synchronized关键字、wait()和notify()方法)、线程池的创建和使用(如ExecutorService)等。掌握多线程编程能够提高程序的效率和响应性,...

    2008年java试题

    Java是世界上最流行的编程语言之...2008年的Java试题可以帮助我们回顾当年的Java技术生态,并与现代Java进行对比,理解技术的演进和发展。通过学习这些试题,不仅可以巩固基础,还能深入理解Java的核心理念和最佳实践。

    JAVA架构知识库整理 PDF版 查阅方便

    这些是所有Java开发者必须掌握的基础知识,无论你是初学者还是有经验的开发者,回顾和巩固这些基础知识总是有益的。 在面向对象编程方面,该文档可能会深入讨论接口、抽象类、访问修饰符、构造器、异常处理和内省等...

    java面试精华14

    ### Java面试精华14:如何获取线程异步执行的结果 在Java多线程编程中,经常需要异步地执行一些任务并获取这些任务的结果。本文将深入探讨如何利用Java提供的`Runnable`与`Callable`接口配合`Future`或`FutureTask`...

    Java程序设计实用教程(第2版)[张永常][电子教案]

    5. Java第2版教材课件05.ppt和07.ppt:这部分内容可能深入到多线程编程,包括线程的创建、同步与通信,以及线程池的使用。 6. Java第2版教材课件14.ppt:可能介绍了Java的高级特性,如反射、动态代理、注解等,以及...

    java 压缩包

    8. **并发编程改进**:Java 5引入了`java.util.concurrent`包,提供了高级并发工具,如线程池、并发容器和同步工具类,如Semaphore、CyclicBarrier等,提升了多线程编程的效率和可控性。 9. **NIO(非阻塞I/O)**:...

    Java期末复习资料

    总的来说,这份"Java期末复习资料"提供了全面的复习内容,帮助学生系统地回顾和巩固Java知识,为考试做好充分准备。在复习过程中,不仅要熟记理论知识,更要通过实践来提升编程能力。同时,不断查阅官方文档,参考...

    掌握并发的钥匙:Java Executor框架深度解析

    ## Java的主要特点回顾 1. **跨平台性**:Java程序可以在任何安装了Java虚拟机(JVM)的平台上运行,无需重新编译。 2. **面向对象**:Java支持封装、继承和多态等面向对象特性。 3. **健壮性**:Java语言设计时...

    疯狂Java:突破程序员基本功16课pdf+源代码

    1. **Java基础知识**:本书首先回顾了Java的基础,包括语法、数据类型、流程控制语句、类和对象等,确保读者具备坚实的编程基础。 2. **面向对象编程**:深入探讨Java的面向对象特性,如封装、继承和多态,以及接口...

    Java课堂示例

    CH8Thread可能包含了线程的创建、线程同步、锁机制、线程池等主题的实例,帮助学习者理解如何在并发环境中有效地管理资源和控制执行顺序。 3. **I/O流** (CH7IO) Java的I/O流系统非常强大,支持对文件、网络和内存...

    2024最新好未来Java开发岗面试回顾

    ### Java核心技术 #### 1. ConcurrentHashMap的数据结构和并发安全机制 **数据结构**:`ConcurrentHashMap`在设计上充分考虑了并发环境下的性能优化。早期版本(Java 7及之前)采用的是分段锁机制,即将整个哈希表...

    《Java设计模式》课程设计报告.docx

    在系统中,某些对象只需要一个实例,例如,线程池、缓存或者数据库连接池等。在本项目中,可能使用单例模式来创建和管理共享的西瓜市场资源,如数据存储或全局配置。 2. **代理模式**: 代理模式为一个对象提供一...

    J2SE&J2EE基础知识+学习过程回顾+在校大学生 学习Java 知识技能 +学习经验

    线程池(ThreadPool)是多线程管理的重要工具,它可以有效地控制并发执行的任务数量,提高系统资源利用率。 【Servlet与Filter】 Servlet是Java Web开发中的核心组件,用于处理HTTP请求。Filter则允许在请求到达...

Global site tag (gtag.js) - Google Analytics