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编程思想读书笔记 #### 一、Java与C++的区别及内存管理 在学习Java的过程中,我们常常会拿它与C++进行比较。这两门语言虽然有着相似之处,但也有许多不同点。 1. **内存管理:** - C++提供了更为底层的...
读书笔记:Java并发编程之美学习记录
读书笔记:Java并发编程之美学习代码
读书笔记:Java并发编程之美笔记
读书笔记:实战Java高并发程序设计学习笔记
读书笔记:《Java并发编程之美》的读书笔记
读书笔记:Java 并发编程之美
读书笔记:Java并发编程之美
读书笔记:《实战Java高并发程序设计》学习笔记
读书笔记:《实战 Java高并发程序设计》学习笔记
读书笔记:Java并发编程核心方法与框架示例代码与学习心得
读书笔记:《实战Java高并发程序设计》读书笔记
读书笔记:高洪岩《Java并发编程—核心方法与框架》学习样例
读书笔记:Java并发编程之美代码
读书笔记:java并发编程之美源码
《王者归来之Thinking in Java读书笔记》是对Bruce Eckel的经典之作《Thinking in Java》第四版的深度学习与总结。这本书是Java程序员的必备参考书,它深入浅出地阐述了Java语言的核心概念和技术,旨在帮助读者理解...