Java并发之ThreadPoolExecutor

Posted 三名狂客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java并发之ThreadPoolExecutor相关的知识,希望对你有一定的参考价值。

一、ThreadPoolExecutor 简介

ThreadPoolExecutor 是一个可被继承 ( extends ) 的线程池实现,包含了用于微调的许多参数和钩子。主要参数如下:

(1) corePoolSize 核心线程数

(2) maximumPoolSize 最大线程数

(3) keepAliveTime 实例化超过 corePoolSize 的线程,在空闲状态下的存活时间

二、Executor实例化

(1) Executors.newSingleThreadExecutor()

Executors.newSingleThreadExecutor() 静态方法则创建另一种典型的只包含单个线程的 ThreadPoolExecutor 实例。

这种单线程执行程序是创建事件循环的理想选择。在这个单线程 ThreadPoolExecutor 实例中,属性 corePoolSize 和属性 maximumPoolSize 的值都为 1,而属性 keepAliveTime 的值为 0

(2)Executors.newFixedThreadPool()

Executors.newFixedThreadPool() 静态方法创建了一个 ThreadPoolExecutor ,它的参数 corePoolSizemaximumPoolSize 都是相等的,且参数 keepAliveTime 始终为 0 ,也就意味着此线程池中的线程数始终相同。

(3)Executors.newCachedThreadPool()

Executors 还提供了 Executors.newCachedThreadPool() 静态方法创建另一个预配置的 ThreadPoolExecutor。该方法创建的线程池没有任何核心线程,因为它将 corePoolSize 属性设置为 0,但同时有可以创建最大数量的额外线程,因为它将 maximumPoolSize 设置为 Integer.MAX_VALUE ,且将 keepAliveTime 的值设置为 60 秒。

三、线程实例

package day01;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 线程池
 * 
 * @author zc
 *
 */
public class ThreadPoolExecutorTest 
	
	public static void main(String[] args) 
		
		AtomicInteger  counter =  new  AtomicInteger();
		// 单线程
	    ExecutorService executor = Executors.newSingleThreadExecutor();
	    executor.submit(()->counter.set(1););
	    executor.submit(()->counter.compareAndSet(1, 2););
	   
	    //  固定大小的线程池
	    ThreadPoolExecutor executors = (ThreadPoolExecutor) Executors.newFixedThreadPool(2);
	    executors.submit(()->Thread.sleep(1000);
	     return null;);
	    
	    executors.submit(()->Thread.sleep(1000);
	     return null;);
	    
	    executors.submit(()->Thread.sleep(1000);
	     return null;);
	    
	    // 没有核心线程的线程池
	   ThreadPoolExecutor executorCache = (ThreadPoolExecutor) Executors.newCachedThreadPool();
	   executorCache.submit(()->Thread.sleep(1000);
	     return null;);
	   
	   executorCache.submit(()->Thread.sleep(1000);
	     return null;);
	   
	   executorCache.submit(()->Thread.sleep(1000);
	     return null;);
	 
		
	



以上是关于Java并发之ThreadPoolExecutor的主要内容,如果未能解决你的问题,请参考以下文章

java并发编程之Future.get() 在线程池配置RejectedExecutionHandler为ThreadPoolExecutor.DiscardPolicy策略时一直阻塞

java并发编程之Future.get() 在线程池配置RejectedExecutionHandler为ThreadPoolExecutor.DiscardPolicy策略时一直阻塞

java并发编程之Future.get() 在线程池配置RejectedExecutionHandler为ThreadPoolExecutor.DiscardPolicy策略时一直阻塞

java同步之线程池ThreadPoolExecutor实现原理

高并发中,那些不得不说的线程池与ThreadPoolExecutor类

多线程之线程池ThreadPoolExecutor