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");
    }
}

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

猜你喜欢

转载自www.cnblogs.com/dzhou/p/13203872.html
今日推荐