对Executor的线程池框架的理解

对Executor的线程池框架的理解

1、使用线程池的好处:
减少线程创建、销毁的开销
稳定

2、Executor框架
架构:
Executor 执行器接口,该接口定义执行Runnable任务的方式。
ExecutorService 该接口定义提供对Executor的服务。
ScheduledExecutorService 定时调度接口。
AbstractExecutorService 执行框架抽象类。
ThreadPoolExecutor JDK中线程池的具体实现。
Executors 线程池工厂类。

JDK内部提供了五种最常见的线程池。由Executors类的五个静态工厂方法创建。

newFixedThreadPool(…)
newSingleThreadExecutor(…)
newCachedThreadPool(…)
newScheduledThreadPool(…)
newSingleThreadScheduledExecutor()

3、ThreadPoolExecutor线程池类
public ThreadPoolExecutor(int var1, int var2, long var3, TimeUnit var5, BlockingQueue var6, RejectedExecutionHandler var7) {
this(var1, var2, var3, var5, var6, var7);
}

var1:核心线程数
var2:最大线程数
var3:线程存货时间。当线程数大于var1,那么超时该时间的线程将会被终结。
var5:var3的时间单位
var6:阻塞队列。
var7:RejectedExecutionHandler 拒绝策略

4、ExecutorService接口
Future<?> submit(Runnable task)
Future submit(Callable task)
Runnable执行完后没有结果。
Callable 执行完后会有一个Future放回对象。解决了之前使用Thread.join()(Thread.join()的作用:让父线程等待子线程结束之后才能继续运行)判断线程是否执行完的问题。

5、ScheduledExecutorService接口
解决了需要重复执行的任务的问题。

6、线程池的生命周期
启动线程池
关闭线程池:shutdown()
shutdownnow()

7、future
Future保存异步计算的结果,可以在我们执行任务时去做其他工作,并提供了以下几个方法

  • cancel(boolean mayInterruptIfRunning):试图取消执行的任务,参数为true时直接中断正在执行的任务,否则直到当前任务执行完成,成功取消后返回true,否则返回false
  • isCancel():判断任务是否在正常执行完前被取消的,如果是则返回true
  • isDone():判断任务是否已完成
  • get():等待计算结果的返回,如果计算被取消了则抛出
  • get(long timeout,TimeUtil unit):设定计算结果的返回时间,如果在规定时间内没有返回计算结果则抛出TimeOutException
    使用Future的好处:
  1. 获取任务的结果,判断任务是否完成,中断任务
  2. Future的get方法很好的替代的了Thread.join或Thread,join(long millis)
  3. Future的get方法可以判断程序代码(任务)的执行是否超时,如:
    try{
    future.get(60,TimeUtil.SECOND);
    }catch(TimeoutException timeout){
    log4j.log(“任务越野,将被取消!!”);
    future.cancel();
    }

8、FutureTask
FutureTask实现了RunnableFuture接口,提供了即可以使用Runnable来执行任务,又可以使用Future执行任务并取得结果的构造器,所以可以利用FutureTask去封装Runnable或Callable对象,之后再submit任务
FutureTask(Callable callable)
FutureTask(Runnable runnable, V result)

实现:
FutureTask task = new FutureTask(new Callable{
public void call(){
//TODO
}
});
Thead thread = new Thread(task);
thread.start();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值