首页 - 国内时事 - jbl,roe,倒车入库技巧-踢足球网,足球青训信息,西班牙青训介绍

jbl,roe,倒车入库技巧-踢足球网,足球青训信息,西班牙青训介绍

发布时间:2019-07-12  分类:国内时事  作者:admin  浏览:207

概述

  • Runnable使命在Executor线程履行器傍边是异步履行的,而有些使命是需求回来履行成果的,故在Executor派生接口ExecutorService接口中界说了带回来成果的提交办法submit,其间回来成果为Future接口的目标。
  • Future接口首要供给了异步回来使命履行成果,撤销使命履行,获取使命履行状况的功用,接口界说如下:

FutureTask:异步成果

  • Future接口的首要完结类为FutureTask,FutureTask一起完结了Runnable和Future接口,故对应的目标实例能够作为使命提交到Executor线程履行器中履行,然后经过本身来获取使命履行成果或许撤销使命履行:
  • 即FutureTask的目标实例被Executor线程履行器内部线程池的某个作业线程和调用get办法等候获取成果的运用主线程所同享,故Executor内部线程池的作业线程在履行完这个使命后,能够告诉和唤醒调用get堵塞等候履行成果的运用主线程,运用主线程也能够撤销该使命的履行,然后告诉作业线程。

  • 在FutureTask中界说了volatile润饰的状况变量state来进行Executor中的作业线程和运用主线程之间的交互,即作业线程发生使命履行成果,告诉运用主线程获取;运用主线程恳求撤销使命履行,告诉作业线程间断该使命履行。在内部完结中经过将state与以下状况常量进行巨细比较来获取使命履行情况,如是正常履行成功仍是反常退出,被撤销等。

一、提交使命到Executor线程履行器

  • 提交使命到Executor线程履行器,对应AbstractExecutorService的submit办法完结如下:在submit中创建了一个FutureTask目标来包装运用界说的Runnable接口完结类task,调用execute将该目标交给Executor线程履行器履行,然后回来该目标引证给运用主线程。

二、运用主线程调用get等候履行成果

  • 在FutureTask中的get办法完结如下:

  • 使命状况state小于等于COMPLETING表明使命还没开端履行,则运用主线程调用awaitDone堵塞休眠,等候Executor的作业线程履行使命并告诉唤醒该运用主线程。详细进程如下:

  • 在FutureTask内部保护了一个单向链表waiters,用于寄存当时等候该使命履行成果的线程,在使命履行完结时,遍历该链表,唤醒每个等候线程。

三、Executor作业线程履行使命

  • Executor的作业线程履行该使命时,会调用该使命的run办法,即FutureTask的run办法,如下为FutureTask的run办法界说:首要查看使命状况state是否为NEW,是,即还没履行过也没有被撤销等,则进行往下履行。履行完结之后,发生履行成果result,调用set办法来处理这个成果。

  • set办法的界说如下:将履行成果赋值给FutureTask的成员变量outcome,更新使命履行状况state为NORMAL,最终调用finishCompletion告诉一切等候这个使命履行成果的线程。

  • finishCompletion的完结如下:遍历使命等候线程链表,运用LockSupport.unpart唤醒对应的线程,然后将该等候线程从链表中移除。

  • 然后回到get办法,运用主线程从awaitDone堵塞回来后,经过report办法来检测履行状况并回来使命履行成果。

四、运用主线程撤销使命

  • 在运用主线程中,能够经过调用FutureTask的cancel办法来撤销该使命的履行,cancel办法的界说如下:首要是更新使命的状况state为INTERRUPTING或许CANCELLED,然后依据mayInterruptIfRunning来操控假如该使命已经在履行,是否间断对应的作业线程来间断该使命的履行,最终调用finishCompletion办法来唤醒等候这个使命履行成果的线程,防止该使命被撤销后,这些线程还在堵塞等候成果。

  • 在Executor的作业线程履行这个使命时,会调用FutureTask的run办法,在run办法中是先查看使命的状况state,假如发现不是NEW,即可能是CANCELLED,INTERRUPTING等,则直接回来,退出该使命的履行。

下一篇
快捷导航
最新发布
标签列表