• 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的异常,不随时间发生先后变化

  • 相关阅读:
    07-selenium、PhantomJS(无头浏览器)
    06爬虫-异步协程
    Numpy数值类型与数值运算-03
    05爬虫-requests模块基础(2)
    初识Matplotlib-01
    03爬虫-requests模块基础(1)
    Django安装与简单事例-02
    JavaWeb学习总结(二):Http协议
    Tomcat学习总结(一):目录简介
    Web服务器学习总结(一):web服务器简介
  • 原文地址:https://www.cnblogs.com/dzhou/p/13203872.html
Copyright © 2020-2023  润新知