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; 
    // } 
    //}
    只限阅读,未经允许不得转载,如有问题请@本人,如我方内容侵权请及时告知我方。
  • 相关阅读:
    Android 如何自定义EditText 下划线?
    一步一步理解 Java 企业级应用的可扩展性
    客户案例—北京优络时代科技有限公司
    11个显著提升 ASP.NET 应用程序性能的技巧——第1部分
    如何用 React Native 创建一个iOS APP?(二)
    如何与 DevOps 为伍?
    通过 DevOps 整合开发和应用安全管道
    性能为王:选择模拟监控的10大理由!
    模拟监控和真实用户体验监测,选哪个?
    PHP 之 Laravel 框架安装及相关开源软件
  • 原文地址:https://www.cnblogs.com/wzy-525/p/12059531.html
Copyright © 2011-2022 走看看