码迷,mamicode.com
首页 > 其他好文 > 详细

第六章 任务执行

时间:2018-07-10 21:30:05      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:eth   thread   await   boolean   方法   .exe   框架   技术分享   htm   

1.创建线程的方式

  1.继承Thread类创建线程

  2.实现Runnable接口创建线程

  3.使用Callable和Future创建线程

  (参考:https://www.cnblogs.com/3s540/p/7172146.html)

 

2.Executor框架——将任务的提交过程和执行过程解耦

//通过execute()方法将任务提交到工作队列,工作线程反复从工作队列中取出任务并执行
public
interface Executor{ void execute(Runnable command); }

技术分享图片

 

3.线程池

  通过调用Executors中的静态工厂方法之一创建一个线程池:

  newFixedThreadPool:创建一个固定长度的线程池。

  newCachedThreadPool:创建一个可缓存的线程池,如果线程池的当前规模超过了处理需求,将回收空闲的线程;当需求增加时,将创建新的线程,线程池的规模不存在限制。

  newSingleThreadExecutor:创建一个单线程的Executor,它创建一个单工作者线程,当该线程异常结束时,会创建另一个线程替代它。确保任务按照在队列中的顺序串行执行。

  newScheduledThreadPool:创建一个固定长度的线程池,而且以延迟或定时的方式来执行任务。

 

4.Executor的生命周期

  为了解决执行服务的生命周期问题,Executor扩展了ExecutorService接口,添加了生命周期的管理方法

  

public interface ExecutorService extends Executor{
    void shutdown();
    List<Runnable> shutdownNow();
    boolean isShutdown();
    boolean isTerminated();
    boolean awaitTermination(long timeout, TimeUnit unit)
    ...
}

ExecutorService的生命周期有3中状态:运行,关闭和已终止

ExecutorService在初始创建时处于运行状态。

shutdown方法将执行平缓的关闭过程:不再接受新的任务,同时等待已经提交的任务执行完成——包括那些还未开始的任务。shutdownNow方法将执行粗暴的关闭过程:将尝试取消所有运行中的任务,并且不再启动队列中尚未开始执行的任务。

等所有任务完成以后,ExecutorService进入终止状态。

 

5.携带结果的任务Callable与Future

  Runnable:不能返回一个值或抛出一个受检查的异常。

  Callable:call()方法将返回一个值或抛出一个异常。

  Future:表示一个任务的生命周期,并提供了相应的方法来判断是否已经完成或取消,以及获取任务的结果和取消任务等。get()方法取决于任务的状态(尚未开始,正在执行,已经完成)。当任务已经完成时,get将返回结果或抛出异常;如果任务没有完成,get将阻塞;如果任务抛出了异常,那get将该异常封装为ExecutionException并重新抛出。

第六章 任务执行

标签:eth   thread   await   boolean   方法   .exe   框架   技术分享   htm   

原文地址:https://www.cnblogs.com/walker993/p/9291076.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!