Java 线程池

 

 

首先来跑一个最简单的线程池例子:

public static void main(String[] args) throws InterruptedException, ExecutionException {
		
		ExecutorService executorService = Executors.newFixedThreadPool(10);
		executorService.submit( ()-> {System.out.println("1");});
		
	
	}

 上面是一个最简单的固定线程池的例子。起了容量为10 的线程池;

 

  

 

看 上面你的图 Java 提供的 线程池的方法。

newFixedThreadPool 得到的是一个固定的线程池,可以定指定 线程工厂 指定线程的创建过程;

 

 

 

newFixedThreadPool 返回的是一个  ThreadPoolExecutor 对象,这个对象的 AbstractExecutorService 的 子类 ,AbstractExecutorService  是  ExecutorService 的 抽象类。

 

所以继承关系  ThreadPoolExecutor -->AbstractExecutorService  -->ExecutorService ->Executor

 

 

 

 

 

 

 

ThreadPoolExecutor 这个类和很关键 里面有大量的关系线程池的属性

 

 

 

 corePoolSize 核心线程数,maximumPoolSize 最大的线程数,keepAliveTime 线程活多久 会被销毁,unit  时间 单位,

 

workQueue 工作队列需要 特殊说明一下,这个是线程池队列的工作方式,链表,数组,延时队列或者优先级队列什么的。

 

这个篇文章介绍的还比较详细:https://www.cnblogs.com/KingIceMou/p/8075343.html

 

 

 

RejectedExecutionHandler handler 顾名之意 在线程池拒绝加入新任务的时候应该怎么办,默认的直接排除拒绝异常

 

 

 

Executors.newCachedThreadPool()  得到一个 初始 大小0 ,最大 Integer.MAX_VALUE 的 一个线程池,需要注意的这个对象,只要请求线程的时候没有可用线程,就会自动扩容。相当于无限线程池。但是他会回收 10 秒没有任务的线程。

 

 

Executors.newFixedThreadPool(nThreads)  固定大小的线程池。不会回收空闲线程 

 

 

 

Executors.newScheduledThreadPool(corePoolSize)  这是一个可以定时的线程池。可以定时执行 线程对象,下面的图可以看待产生的对象都不一样了。请求实现了定时借口  ,

 

 实现了 ScheduledExecutorService 接口 , schedule 定时方法,也就是 说这个线程会在 延时 一定时间后执行。

 

 

 Executors.newSingleThreadExecutor()  一个单线程的线程池。

 

Executors.newSingleThreadScheduledExecutor() 可以定时的 单线程 线程池。

 

Executors.newWorkStealingPool() 这个是jdk 7 新添加的 根据cpu 的数量来创建的线程池。

 

ExecutorService 可以加入一个 执行 一个线程 

 

 

 

 参数可以 Runnable 也可以是 Callable<T> task  ,区别是有没有返回。 返回值  Future 对象  get 方法是阻塞 的,需要等待线程返回才能得到。

 

线程池 需要手动调用 e.shutdown(); 或者 e.shutdownNow() 销毁。区别在于e.shutdown();   会执行完未执行 完成的任务。 e.shutdownNow() 会让正在执行的线程抛出 打断 interrupt  异常。然后终止。

 

掉了shutdown之类的方法线程池的状态就变 e.isShutdown() 为 true,但是这时 的  isTerminated() 可能还是  false  需要等 所有线程都子线程都终止了才是  isTerminated() 才是true。

 

posted on 2018-07-09 16:18  zhangyukun  阅读(133)  评论(0编辑  收藏  举报

导航