Executor框架介绍
1、Executor框架提供了一个灵活的线程池实现,防止应用程序过载而耗尽内存。它是基于生产者-消费者模式的,提交任务的线程是生产者,执行任务的线程是消费者。
2、线程池
newFixedThreadPool创建一个定长的线程池,每当提交一个任务就创建一个线程,直到达到池的最大长度,这是线程池会保持长度不再变化(如果一个线程由于非预期的Exception而结束,线程池会补充一个新的线程)。
newCachedThreadPool创建一个可缓存的线程池,如果当前线程池的长度超过了处理的需要时,它可以灵活地回收空闲的线程。当需求增加时,它可以灵活的添加新的线程,而并不会对池的长度作任何限制。
newSingleThreadExecutor创建一个单线程化的executor,它只创建唯一的工作者线程来执行任务,如果这个线程异常结束,会有另一个取代它。executor会保证任务依照任务队列所规定的顺序(FIFO,LIFO,优先级)执行。
newScheduledThreadPool创建一个定长的线程池,而且支持定时的以及周期性的任务执行。
3、完成服务CompletionService
CompletionService整合了Executor和BlockingQueue的功能,你可以将Callable任务提交给它去执行,然后使用类似队列中take和poll方法,在任务结果完整可用时获得这个结果。
4、SwingUtilities.invokeAndWait,它可以安排一个Runnable任务在事件派发线程中执行,并会阻塞当前线程直到它完成(只能从非GUI线程中调用,否则会发生死锁)
SwingUtilities.invokeAndLater,它可以安排一个Runnable任务在事件派发线程中执行(可从任意线程中调用)
5、Future是被设计来处理可取消任务,所以遇到任务处理有取消需求时,可以考虑用Future
6、发生死锁的原因:两个或者多个线程企图以不同的顺序获得相同的多个锁时会发生
例子:
public class LeftRightDeadLock{
private Object left = new Object();
private Object right = new Object();
public void leftRight(){
synchronized(left){
synchronized(right){
doSomething();
}
}
}
public void rightLeft(){
synchronized(right){
synchronized(left){
doSomething();
}
}
}
}
7、Amdahl定律
Amdahl定律描述了在一个系统中,基于可并行化和串行化组件各自所占的比重,程序通过获得额外的计算资源,理论上能够加速多少。如果F是必须串行化执行的比重,N代表处理器数,提速公式为:
SpeedUp <= 1/ (F + (1 - F)/N)
8、创建Lock/ReentrantLock机制的意义
内部锁在大部分情况下都能很好的工作,但是有一些功能上的局限--不能中断那些等待获取锁的线程,并且在请求锁失败的情况下只能无限等待。内部锁必须在获取它的代码中释放;这很好的简化了代码,与异常处理机制能够良好的互动。但在某些情况下,一个更灵活的加锁机制提供了更好的活跃度和性能。
分享到:
相关推荐
这本书的读书笔记涵盖了多个关键知识点,旨在帮助读者深入理解Java并发编程的核心概念。 1. **线程和进程的区别** - **线程** 是程序执行的最小单位,一个进程中可以有多个线程同时执行,共享同一块内存空间,通信...
### Java并发编程笔记 #### 实现Runnable接口与继承Thread类 在Java中,实现多线程功能主要有两种途径:一种是通过实现`Runnable`接口,另一种则是通过继承`Thread`类。这两种方式各有优劣,具体选择哪一种取决于...
在Java并发编程中,数据的封装与访问控制、线程安全性的考量、同步机制的使用是重要的基础概念和技巧。以下是从给出的文件内容中提取出的详细知识点: 1. 数据封装与访问控制:确保内部私有数据不被轻易访问,并且...
读书笔记:Java并发编程之美读书笔记
《Java并发编程实战》个人读书笔记,非常详细: 1 简介 2 线程安全性 3 对象的共享 4 对象的组合 5 基础构建模块 6 任务执行 7 取消与关闭 8 线程池的使用 9 图形用户界面应用程序 10 避免活跃性危险 11 性能与可...
《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括可见性、发布与逸出、线程封闭、不可变性、安全发布等内容
### Java编程思想读书笔记 #### 一、Java与C++的区别及内存管理 在学习Java的过程中,我们常常会拿它与C++进行比较。这两门语言虽然有着相似之处,但也有许多不同点。 1. **内存管理:** - C++提供了更为底层的...
《java并发编程实战》读书笔记-第2章-线程安全性,脑图形式,使用xmind8制作 包括引言、线程安全性定义、原子性、加锁机制、使用锁保护状态、活跃性与性能等内容
读书笔记:Java并发编程之美学习记录
读书笔记:Java并发编程之美学习代码
读书笔记:Java并发编程之美笔记
读书笔记:实战Java高并发程序设计学习笔记
java并发编程的艺术读书笔记根据章节整理的核心内容,便于自己理解
《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括同步容器类、并发容器类、阻塞队列和生产者消费者模式、阻塞和中断方法、同步工具类。最后是构建高效且可伸缩的结果缓存
《java并发编程实战》读书笔记-第3章-对象的共享,脑图形式,使用xmind8制作 包括线程安全类设计、实例封闭、线程安全性委托、现有线程安全类中添加功能和文档化同步策略等内容
读书笔记:《Java并发编程之美》的读书笔记
读书笔记:Java 并发编程之美
读书笔记:Java并发编程之美
读书笔记:《实战Java高并发程序设计》学习笔记
读书笔记:《实战 Java高并发程序设计》学习笔记