此博客是本人从学生时代开始做笔记所用, 部分是工作所遇问题,做填坑笔记,部分闲来查阅资料,加上自己的理解所总结的学习笔记, 常忙得不可开交,若漏了资料来源,望通知~ 前路漫漫,写点东西告诉自己正在一点点进步,而不要迷失于繁忙。

Executor简析

本文只做简要解析,实际情形下我们多用spring的taskExecutor

 

直接使用new Thread()创建线程的缺点:

1、new Thread()耗费性能 

2、调用new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制创建,之间相互竞争,会导致过多占用系统资源导致系统瘫痪。 

3、不利于扩展,比如如定时执行、定期执行、线程中断

 

使用线程池的优点:

1、可重用存在的线程,减少对象创建、消亡的开销,性能佳 

2、可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞 

3、提供定时执行、定期执行、单线程、并发数控制等功能

----------------------------------------------------------------------------------------------

 

Exector继承树

解析:

Executor接口(执行器)

位于java.util.cocurrent 包下,内部包含线程池的实现,Java 5后引入,用于启动、调度、管理线程(利用内部的线程池)。

备注:通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免this逃逸问题

注意:Executor!= 线程池,Executor>线程池

 

ExecutorService接口

继承自Executor 接口 

 

Executors类

通过工厂方法来创建不同的线程池,如:newFixedThreadPool、newCachedThreadPool、newSingleThreadExecutor、newScheduledThreadPool。

1.public static ExecutorService newFixedThreadPool(int nThreads) 

创建固定数目线程的线程池,当线程池满,多出的任务得在队列等待。

2.public static ExecutorService newCachedThreadPool() 

线程数目不固定,使用完后不立即关闭,而是在缓存中存放60s。当我们调用execute时如果缓存中有线程,将重用,否则新建一个。

3.public static ExecutorService newSingleThreadExecutor() 

创建一个单线程化的Executor。

4.public static ScheduledExecutorService newScheduledThreadPoolExecutor(int corePoolSize) 

创建一个支持定时及周期性的任务执行的线程池,多数情况下可用来替代Timer类。

 

posted @ 2019-04-11 10:39  炎泽  阅读(205)  评论(0编辑  收藏  举报