zoukankan      html  css  js  c++  java
  • 线程超时

    package com.****.winUtliTest.ThreadTest;
    
    import java.util.HashMap;
    import java.util.concurrent.Callable; 
    import java.util.concurrent.ExecutionException; 
    import java.util.concurrent.ExecutorService; 
    import java.util.concurrent.Executors; 
    import java.util.concurrent.Future; 
    import java.util.concurrent.TimeUnit; 
    import java.util.concurrent.TimeoutException;
    
    /** 
    * 启动一个任务,然后等待任务的计算结果,如果等待时间超出预设定的超时时间,则中止任务。 
    * 
    * @author Chen Feng 
    */ 
    public class ThreadTest {
    
    public static void main(String[] args) { 
    // System.out.println("Start ..."); 
    //
    // ExecutorService exec = Executors.newCachedThreadPool(); //创建一个线程池 
    // 
    // testTask(exec, 15); // 任务成功结束后等待计算结果,不需要等到15秒 ntaskResult : true failReason: null
    // testTask(exec, 5); // 只等待5秒,任务还没结束,所以将任务中止 ntaskResult : null failReason : 主线程等待计算结果超时,因此中断任务线程!
    //
    // exec.shutdown(); 
    // System.out.println("End!"); 
    }
    
    public static HashMap<String, String> testTask(ExecutorService exec, int timeout) { 
    // MyTask task = new MyTask(); 
    a sA=new a();
    Future<HashMap<String, String>> future = exec.submit(sA); 
    
    HashMap<String, String> taskResult = null; 
    String failReason = null; 
    try { 
    // 等待计算结果,最长等待timeout秒,timeout秒后中止任务 
    taskResult = future.get(timeout, TimeUnit.SECONDS); 
    } catch (InterruptedException e) { 
    failReason = "主线程在等待计算结果时被中断!"; 
    } catch (ExecutionException e) { 
    failReason = "主线程等待计算结果,但计算抛出异常!"; 
    } catch (TimeoutException e) { 
    failReason = "主线程等待计算结果超时,因此中断任务线程!"; 
    exec.shutdownNow(); 
    } 
    
    System.out.println("ntaskResult : " + taskResult.get("isSucc")); 
    System.out.println("failReason : " + failReason);
    return taskResult; 
    } 
    }
    
    //class MyTask implements Callable<Boolean> { 
    //
    // @Override 
    // public Boolean call() throws Exception { 
    // // 总计耗时约10秒 
    // for (int i = 0; i < 100L; i++) { 
    // Thread.sleep(100); // 睡眠0.1秒 
    // System.out.print('-'); 
    // } 
    // return Boolean.TRUE; 
    // } 
    //}
    只限阅读,未经允许不得转载,如有问题请@本人,如我方内容侵权请及时告知我方。
  • 相关阅读:
    isMemberOf与isKindOf的区别
    当你的工程出现了问题,在别的电脑上可以正常运行。你该怎么做。。
    iOS 声明属性关键字的总结
    UISegmentedControl方法与属性的总结
    UILabel与UIFont的用法和属性的一些总结
    UIActivityIndicatorView控件的属性和方法
    第四百六十一天 how can I 坚持
    《Java基础知识》Java集合(Collection)
    《Java基础知识》Java线程的概念
    《Java基础知识》Java断言
  • 原文地址:https://www.cnblogs.com/wzy-525/p/12059531.html
Copyright © 2011-2022 走看看