zoukankan      html  css  js  c++  java
  • FutureTask类

    FutureTask类是Future 的一个实现,并实现了Runnable。 所以可通过Executor(线程池)来运行,也可传递给Thread对象运行。

     假设在主线程中须要运行比較耗时的操作时。但又不想堵塞主线程时, 能够把这些作业交给Future对象在后台完毕。当主线程将来须要时。 就能够通过Future对象获得后台作业的计算结果或者运行状态。 
    Executor框架利用FutureTask来完毕异步任务。并能够用来进行不论什么潜在的耗时的计算。
    一般FutureTask多用于耗时的计算,主线程能够在完毕自己的任务后,再去获取结果。



    /**
     * Created with IntelliJ IDEA.
     * User: 菜鸟大明
     * Date: 14-10-23
     * Time: 下午7:02
     * To change this template use File | Settings | File Templates.
     */
    public class MyCallable1 implements Callable {
        @Override
        public Object call() throws Exception {
            System.out.println("call");
            return "end";
        }
    
        public static void main(String[] args) throws ExecutionException, InterruptedException {
    
            MyCallable1 myCallable1 = new MyCallable1();
    
            FutureTask fk = new MyFutureTask(myCallable1);
            // 它能够通过Thread包装来直接运行,
    //        Thread thread = new Thread(fk);
    //        thread.start();
            // 也能够提交给ExecuteService来运行,
    //        ExecutorService exec = Executors.newCachedThreadPool();
    //        Future<String> future = exec.submit(myCallable1);
            // 而且还能够通过v get()返回运行结果,
            // 在线程体没有运行完毕的时候,主线程一直堵塞等待,运行完则直接返回结果。
            fk.run();
            System.out.println(fk.get());
        }
    }
    
    class MyFutureTask extends FutureTask {
    
        public MyFutureTask(Callable callable) {
            super(callable);
        }
    
        // 当线程运行结束,则运行done方法。

    @Override public void done() { // 此处一般用来计算任务运行耗时解析。

    System.out.println("done"); } }



  • 相关阅读:
    LeetCode:删除有序数组中的重复项
    ABAP新语法之内联声明
    SAL实战练习-全选及按钮事件等
    固定资产创建BAPI_FIXEDASSET_CREATE--含扩展结构字段EXTENSIONIN
    SAP-采购订单-数据输入校验
    外围系统传SAP---OUT2SAP接口测试
    SAP2OUT异步接口测试
    SAP2OUT同步接口测试
    SAP-批量创建货源清单
    BDC-用户锁定及有效期设置程序
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/8614933.html
Copyright © 2011-2022 走看看