- 
                Notifications
    
You must be signed in to change notification settings  - Fork 20
 
ExecutorAndPool
目录 start
目录 end|2020-04-27 23:42|
为什么要使用线程池? 为什么要使用该框架?
- 使用线程池能节省线程创建销毁的开销, 且能通过线程池的参数设置限流
 
线程池 BlockingQueue synchronized volatile 参考: Java(Android)线程池 参考: Java ThreadPoolExecutor线程池使用的一个误区 参考: 聊聊并发(三)Java线程池的分析和使用 参考: 线程池
- 
execute:用于将任务提交给执行器执行- (会吞异常) 参数为Runable
 
 - 
submit:功能同execute,但该方法有返回值- 参数为Callable
 
 - 
shutdown():用于关闭执行器资源,执行器会拒绝后面的任务提交,并等待线程池中的任务结束后关闭资源- 应用关闭前尽量显式调用该方法关闭所有的线程池,避免资源泄漏
 
 - 
shutdownNow():立即关闭执行器,不再执行线程池中等待执行的任务,正在执行的任务将会继续 - 
isShutdown():调用了shutdown()后该方法将返回true - 
awaitTermination(long timeout, TimeUnit unit):该方法会阻塞调用执行器的线程,并等待执行器内任务完成会到达指定的时间 - 
invokeAny(Collection<? extends Callable<T>> tasks):该方法返回到值为第一个完成的任务返回的值 - 
invokeAll(Collection<? extends Callable<T>> tasks):该任务的返回值为所有任务完成的结果 
该处讲述的方法都为
java.util.concurrent.Executors的方法 (静态工厂模式)
- 
newFixedThreadPool(int nThreads):用于创建固定大小的线程池- 传入的参数表示为线程池中最大的线程数
 - 当发送的任务大于该数量时,线程池中只会创建该数量的线程,剩下的任务将会被阻塞,直到有空闲的线程可用
 - 创建方式: 
ExecutorService executor = Executors.newFixedThreadPool(3); 
 - 
newSingleThreadExecutor():用于创建单线程化的线程池- 在该线程池中只有一个工作的线程
 - 该线程池可保证
任务会按任务的提交顺序进行 - 创建方式: 
ExecutorService executor = Executors.newSingleThreadExecutor(); 
 - 
newCachedThreadPool():用于创建一个可缓存的线程池- 该线程池的
工作线程的创建数量几乎没有限制 - 当线程池中没有可用的线程时,新添加的任务将会再创建一个线程运行
 - 运行完的任务,在任务运行完的
60s内不会被回收,当有新任务时将会重用这些没被回收的线程 - 创建方式: 
ExecutorService executor = Executors.newCachedThreadPool(); 
 - 该线程池的
 - 
newScheduledThreadPool(int corePoolSize):用于创建一个定长的且支持定时及周期性运行任务的线程池- 传入的参数表示为线程池中最大的线程数
 - 创建方法: 
ScheduledExecutorService executor = Executors.newScheduledThreadPool(3); - 使用
schedule(Runnable command, long delay, TimeUnit unit)方法提交任务时,可让任务延迟执行,如下延迟1分钟执行示例:// 定义执行器,创建一个缓存线程池 ScheduledExecutorService executor = Executors.newScheduledThreadPool(3); // 提交任务 executor.schedule(() -> System.out.println("hello: " + new Date()), 1, TimeUnit.SECONDS); // 关闭执行器资源 executor.shutdown();
 - 使用
scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)方法提交任务,可让任务延迟并周期性执行,如下让任务延迟一秒后没3秒执行一次:// 定义执行器,创建一个缓存线程池 ScheduledExecutorService executor = Executors.newScheduledThreadPool(3); // 提交任务 executor.scheduleAtFixedRate(() -> System.out.println("hello: " + new Date()), 1, 3, TimeUnit.SECONDS); // 周期性执行任务时不要关闭执行器,否则不会周期性执行 //executor.shutdown();
 
 - 
newSingleThreadScheduledExecutor():功能与newScheduledThreadPool(int corePoolSize)方法创建的线程池类似,只是该方法创建的是单例化的线程池,即在该线程池中只有一个工作的线程 - 
newWorkStealingPool():可创建一个拥有多个任务队列的线程池- 该方法实在
Java1.8增加的方法 - 它是线程池类
ForkJoinPool的扩展 - 该线程池能够合理的使用CPU进行对任务操作(并行操作),所以适合使用在很耗时的任务中
 - 创建方式:
ExecutorService executor = Executors.newWorkStealingPool(); 
 - 该方法实在
 
- 
【 Algorithm 】
 - 
【 Blog 】
 - 
【 C 】
 - 
【 Database 】
 - 
【 Distributed 】
 - 
【 FrontEnd 】
- 【 FrontEnd/Frame 】
 - 【 FrontEnd/Node 】
 - Font
 - Hexo
 - JavaScript
 - LearnPS
 - ResponseCode
 - SVG
 - ViewSolution
 - extjs学习笔记
 
 - 
【 Functional 】
 - 
【 Go 】
 - 
【 Groovy 】
 - 
【 Java 】
- 【 Java/AdvancedLearning 】
- 【 JavaBasic 】
 - 【 JavaCache 】
 - 【 JavaCollection 】
 - 【 JavaConcurrency 】
 - 【 JavaMap 】
 - Annotation
 - ClassFile
 - Collection
 - Concurrency
 - Deploy
 - Exception
 - ExtendsAndInterface
 - Generics
 - IO
 - JDBC
 - JDKAndJRE
 - JMX
 - JVM
 - Java11
 - Java7
 - Java8
 - JavaNetwork
 - JavaReleaseVersion
 - JavaWeb
 - JvmPerformance
 - MQ
 - MultipleLanguage
 - Proxy
 - Reflection
 - Serialize
 - SyntaxAndType
 - Thread
 - WebPerformance
 
 - 【 Java/Android 】
 - 【 Java/Ecosystem 】
 - 【 Java/MSA 】
 - 【 Java/Spring 】
 - 【 Java/TemplateEngine 】
 - 【 Java/Test 】
 - 【 Java/Tool 】
 - 【 Java/thread 】
 - AlibabaJavaStandard
 - DesignPattern
 - HashMap解析
 - Java-NIO
 - Java虚拟机
 - Log
 - MIS
 - Quartz
 - RESTful
 - WebSocket学习笔记
 - ZooKeeper学习笔记
 - android学习笔记
 
 - 【 Java/AdvancedLearning 】
 - 
【 Kotlin 】
 - 
【 Linux 】
- 【 Linux/Alpine 】
 - 【 Linux/Arch 】
 - 【 Linux/Base 】
 - 【 Linux/Centos 】
 - 【 Linux/Container 】
 - 【 Linux/Debian 】
 - 【 Linux/Tool 】
 - JavaDevInit
 - Linux系统学习
 
 - 
【 MyBlog 】
 - 
【 Python 】
- 【 Python/Tool 】
 - Python
 - PythonConcurrent
 - PythonGUI
 - PythonGame
 - PythonNet
 - PythonOffices
 - PythonWeb
 - Python基础
 - Python核心学习
 
 - 
【 Reactive 】
 - 
【 Rust 】
 - 
【 Scala 】
 - 
【 Script 】
 - 
【 Skills 】
- 【 Skills/Application 】
 - 【 Skills/CS 】
 - 【 Skills/Cache 】
 - 【 Skills/Councurrency 】
 - 【 Skills/DevOps 】
 - 【 Skills/Document 】
 - 【 Skills/Ecology 】
 - 【 Skills/Network 】
 - 【 Skills/Search 】
 - 【 Skills/SoftwareEngineering 】
 - 【 Skills/Spider 】
 - 【 Skills/Test 】
 - 【 Skills/Vcs 】
 - 【 Skills/Work 】
 - AppManual
 - CelebrityQuotes
 - Miscellaneous
 - Platform
 - Problem
 - Protobuf
 - RegularExpression
 - SoftwareDesignEngineer
 - Website
 
 - 
【 Windows 】