zoukankan      html  css  js  c++  java
  • FUTURE .get 异常抛出会如何提示

    package com.dzhou.svntool.test;
    
    import java.util.concurrent.*;
    
    public class CallableFutureTest {
    
        public static void main(String[] args) throws InterruptedException, ExecutionException {
            System.out.println("start main thread");
            final ExecutorService exec = Executors.newFixedThreadPool(5);
    
            Callable<String> call = new Callable<String>() {
                public String call() {
    
                    System.out.println(" start new thread." + Thread.currentThread().getName());
                    try {
                        Thread.sleep(1000 * 5);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName());
                    String name = Thread.currentThread().getName().substring(Thread.currentThread().getName().length()-1,Thread.currentThread().getName().length());
    
                    if (name.equals("3") ) {
                        try {
                            Thread.sleep(3000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.println("come in"+name);
                        throw new RuntimeException("3");
                    }
                    if (name.equals("1") ) {
                        try {
                            Thread.sleep(2000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.println("come in"+name);
                        throw new RuntimeException("1");
                    }
                    if (name.equals("2") ) {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.println("come in"+name);
                        throw new RuntimeException("2");
                    }
                    if (name.equals("4") ) {
                        try {
                        Thread.sleep(4000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    System.out.println(" end new thread." + Thread.currentThread().getName());
                    // call方法返回值
                    return "some value.";
                }
            };
            Future<String> task = exec.submit(call);
            Future<String> task1 = exec.submit(call);
            Future<String> task2 = exec.submit(call);
            Future<String> task3 = exec.submit(call);
            try {
                // 阻塞当前线程,即主线程,并等待子线程结束
                task.get();
                task1.get();
                task2.get();
                task3.get();
            } catch (Exception e) {
                System.out.println(" error-" + Thread.currentThread().getName() + e.getMessage());
            } finally {
                System.out.println(" finally .");
                exec.shutdown();
            }
            Thread.sleep(1000 * 2);
    
            System.out.println("end main thread");
        }
    }

    主线程捕捉的异常是第一个future.get的异常,不随时间发生先后变化

  • 相关阅读:
    僵尸进程
    理论整理
    SQLServer相关概念
    存储过程
    我的简书地址
    swift pragma mark
    苹果iOS开发中如何直接跳转到App Store页面
    使用cocoadPod updating local specs repositories 卡主
    iOS 代码格式化插件Clang-Format
    iOS错误:AFNetworking Error Domain=NSURLErrorDomain Code=-999
  • 原文地址:https://www.cnblogs.com/dzhou/p/13203872.html
Copyright © 2011-2022 走看看