zoukankan      html  css  js  c++  java
  • 怎样给ExecutorService异步计算设置超时

    ExecutorService接口使用submit方法会返回一个Future<V>对象。Future表示异步计算的结果。它提供了检查计算是否完毕的方法,以等待计算的完毕,并获取计算的结果。计算完毕后仅仅能使用get方法来获取结果。如有必要,计算完毕前能够堵塞此方法。取消则由cancel方法来运行。还提供了其它方法,以确定任务是正常完毕还是被取消了。

    一旦计算完毕,就不能再取消计算。假设为了可取消性而使用Future但又不提供可用的结果,则能够声明Future<?>形式类型、并返回null作为底层任务的结果。

    写个简单样例:

    import java.util.concurrent.*;
    
    /**
     * To change this template use File | Settings | File Templates.
     *
     * @author wangqing
     * @since 1.0.0
     */
    public class TestFuture {
        public static void main(String[] args) {
            ExecutorService poll = Executors.newFixedThreadPool(100);
            Future<Boolean> future = poll.submit(new Callable<Boolean>() {
                @Override
                public Boolean call() throws Exception {
                    Thread.sleep(1000*10);
                    System.out.println("任务运行完毕");
                    return true; 
                }
            });
            try {
                future.get(3,TimeUnit.SECONDS);
            } catch (InterruptedException e) {
                e.printStackTrace(); //get为一个等待过程。异常中止get会抛出异常 
            } catch (ExecutionException e) {
                e.printStackTrace(); //submit计算出现异常
            } catch (TimeoutException e) {
                e.printStackTrace(); //超时异常
                future.cancel(true); //超时后取消任务
            }finally {
                poll.shutdown();
            }
        }
    }


  • 相关阅读:
    递归回溯 UVa140 Bandwidth宽带
    嵌入式设备网络设置
    海思板卡SATA最佳读写块大小测试
    Linux日志轮循实现(shell)
    检测应用的内存泄漏情况(shell)
    Python的交叉编译移植至arm板
    写一个简单的配置文件和日志管理(shell)
    shell 实现主板测试
    主板硬件性能测试
    C语言 模2除法
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6728204.html
Copyright © 2011-2022 走看看