• Callable 与 Future


    package cn.itcast.write;
    
    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;
    
    public class FutureAndCall {
        /**
         * Callable与Runnable类似
         * call方法和run方法
         * 
         * Future 获取结果异常
         */
        public static void main(String[] args) {
            
            //1---------------------------------
            ExecutorService threadPool = Executors.newSingleThreadExecutor();
            Future<String> future = threadPool.submit(new Callable<String>() {
                @Override
                public String call() throws Exception {
                    return "200";
                }
            });
            try {
                System.out.println(future.get());
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ExecutionException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            threadPool.shutdownNow();
            
            //2---------------------------------
            CallableTask task1 = new CallableTask(1);
            CallableTask task2 = new CallableTask(2);
            CallableTask task3 = new CallableTask(3);
            
            
            try {
                ExecutorService threadPool1= Executors.newFixedThreadPool(3);
                Future<Integer> f1 =  threadPool1.submit(task1);
                System.out.println(f1.get());
                
                Future<Integer> f2 =  threadPool1.submit(task2);
                System.out.println(f2.get());
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                f2.cancel(true);
                
                
                Future<Integer> f3 =  threadPool1.submit(task3);
                System.out.println(f3.get());
                
                
                threadPool1.shutdownNow();
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (ExecutionException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            
            
        }
    }
    
    
    class CallableTask implements Callable<Integer>{
        
        private int data;
        public CallableTask(int data){
            this.data = data;
        }
        
        @Override
        public Integer call() throws Exception {
            
            if (data == 1) {
                return 1;
            }
            
            if (data == 2) {
                while(true){
                    System.out.println("2222");
                    Thread.sleep(1000);
                    return 2;
                }
            }
            
            if (data == 3) {
                /*try {
                    throw new Throwable();
                } catch (Throwable e) {
                    e.printStackTrace();
                }*/
            }
            
            
            return null;
        }
    
        
    }
  • 相关阅读:
    前端职场的那些事情
    PS中的图像知识
    HTML5学堂,感谢您一年的陪伴(上)
    浏览器与HTML5的相辅相成
    当学习前端过程中心态发生了变化
    前端入门相关工具
    初学HTML5、初入前端
    前端开发工程师的发展方向
    关于元素水平垂直居中的那些事?
    便捷的前端开发工具
  • 原文地址:https://www.cnblogs.com/lxh520/p/9337538.html
Copyright © 2020-2023  润新知