技术复习-java线程池

ThreadPoolExecutor

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
参数详解
  1. corePoolSize 核心线程数 当线程数<corePoolSize时,新建线程。

  2. maxinumPoolSize 最大线程数

  3. keepAliveTime 存活时间 当线程数>corePoolSize时,空闲线程存活的最长时间

  4. timeUnit 单位时间

  5. workQueue 保存任务的阻塞队列

  6. threadFactory 线程创建工厂

  7. handler 拒绝策略

任务执行顺序
  1. 当线程数<corePoolSize时,新建线程执行任务。
  2. 当线程数>corePoolSize,且workQueue未满的时候,任务加到workQueue中。
  3. 当线程数>corePoolSize,且workQueue满了,且当前线程数<maximumPoolSize,则新起线程执行。
  4. 当线程数>corePoolSize,且workQueue满了,且当前线程数>=maximumPoolSize,则执行拒绝策略
4个默认拒绝策略

拒绝策略默认有4种 1.抛出异常 2.直接丢弃 3.丢弃队列中最老的 4.直接调用run方法,阻塞执行。 当然也可以继承RejectedExecutionHandler实现自己的拒绝策略

Executors

因为参数比较多,java中的Exectors提供了简便的线程池创建方式。

1.Executors#newFixedThreadPool(int nThreads) 固定线程池
public static ExecutorService newFixedThreadPool(int nThreads) {
		return new ThreadPoolExecutor(nThreads, nThreads,
			 0L, TimeUnit.MILLISECONDS,
			 new LinkedBlockingQueue<Runnable>());
	}

可以看到用的workQueue是LinkedBlockingQueue,说明队列无限长,线程池最大值就是入参nThreads。

2.Executors#newCachedThreadPool() 线程池为Integer.MAX_VALUE的线程池
public static ExecutorService newCachedThreadPool() {
		return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
		60L, TimeUnit.SECONDS,
		new SynchronousQueue<Runnable>());
	}

SynchronousQueue是容量为1的阻塞队列,所以新增任务的时候会新起线程,线程数最大值为Integer.MAX_VALUE

3.Executors#newSingleThreadPool() 线程数为1的线程池
public static ExecutorService newSingleThreadExecutor() {
		return new FinalizableDelegatedExecutorService
			(new ThreadPoolExecutor(1, 1,
			0L, TimeUnit.MILLISECONDS,
			new LinkedBlockingQueue<Runnable>()));
	}

不用说了,线程数最大为1。

TaskFuture

继承于Future,能够实现带返回值的线程执行结果。 几个特殊方法, isDone() get(),get(Long timeOut,TimeUtil) cancel(),isCancel()

转载于:https://my.oschina.net/u/2250599/blog/3045630

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值