美文网首页
Java线程池相关类解释,整理自Java文档

Java线程池相关类解释,整理自Java文档

作者: HWilliamgo | 来源:发表于2018-06-19 15:29 被阅读4次

    接口Executor:

    一个可以执行被提交的Runnable的对象。该接口提供了一种任务提交的解耦方案,体现在每个task如何运行,使用,调度等。
    Executor接口并不严格要求task的执行过程是异步的,在最简单的情况下,一个Executor可以直接将task放在调用者的线程中执行:

    class DirectExecutor implements Executor{
      public void execute(Runnable r){
        r.run();
      }
    }
    

    但更常见的情况一般是:task会被放置在其他线程而非调用者线程执行。
    许多Executor接口的实现会给task如何以及何时被调用加上限制。

    void execute(Runnable command);
    

    Runnable可在新线程,线程池,或者调用者线程执行。

    接口ExecutorService(Executor的拓展)

    是一个提供了termination和返回Future来追踪一个或多个异步tasks的对象。

    termination:指executor没有正在执行的task,没有等待执行的task,且没有新的task可以被接收。

    shutdown();新的task不再被接收,已提交的task会执行完毕,重复调用该方法没有其他效果。该方法不会阻塞调用者线程来等待task去执行完毕,若要阻塞当前线程,该调用awaitTermination();

    shutdownNow();尝试停止所有正在执行的task,停止正在等待的task,返回等待执行的task的List<Runnable>。但并不保证能成功停止正在执行的线程,因为该方法的实现一般就是用Thread#interrupt(),那么就要求线程本身就能正确根据interrupt()方法来停止自身。

    isShutdown()返回true如果调用过shutdown()或者shutdownNow()

    isTerminated();如果全部task都在调用shutdown()后完成了,将返回true,若调用isTerminated()之前没有调用过shutdown()shutdownNow(),该方法永远返回false。

    awaitTermination(long timeout,Timeunit unit) throws InterruptedExeption; 阻塞调用者的线程,直到所有task在shutdown后完成,或者timeout超时,或者当前线程被interrupted。

    Future<T> submit(Callable<T>)提交一个有返回值的任务(Callble)并返回一个Future对象。可通过Future#get()来返回任务处理完成的结果。若要为获取一个任务的执行结果而阻塞当前调用者线程,可以

    result=exec.submit(aCallable).get();
    

    相关文章

      网友评论

          本文标题:Java线程池相关类解释,整理自Java文档

          本文链接:https://www.haomeiwen.com/subject/qcpaeftx.html