zoukankan      html  css  js  c++  java
  • CachedThreadPool

    /**
     * <html>
     * <body>
     *  <P> Copyright 1994 JsonInternational</p>
     *  <p> All rights reserved.  - https://github.com/Jasonandy/Java-Core-Advanced </p>
     *  <p> Created by Jason</p>
     *  </body>
     * </html>
     */
    package cn.ucaner.core.concurrent;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    /**
    * @Package:cn.ucaner.core.concurrent   
    * @ClassName:CachedThreadPool   
    * @Description:   <p> 
    * https://blog.csdn.net/agoodcoolman/article/details/44082181
    * https://www.zhihu.com/question/23212914
    * 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程
    * 
    * 线程池为无限大,当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。
    *  Star : https://www.cnblogs.com/baizhanshi/p/5469948.html</p>
    * @Author: - Jason   
    * @CreatTime:2018年5月16日 下午6:04:59   
    * @Modify By:   
    * @ModifyTime:  2018年5月16日
    * @Modify marker:   
    * @version    V1.0
     */
    public class CachedThreadPool {
        
        public static void main(String[] args) {
            
            ExecutorService exec = Executors.newCachedThreadPool();
            for (int i = 0; i < 5; i++) {
                exec.execute(new LiftOff());
            }
            exec.shutdown();
        }
    }
    /**
     * <html>
     * <body>
     *  <P> Copyright 1994 JsonInternational</p>
     *  <p> All rights reserved.  - https://github.com/Jasonandy/Java-Core-Advanced </p>
     *  <p> Created by Jason</p>
     *  </body>
     * </html>
     */
    package cn.ucaner.core.concurrent;
    
    import java.util.ArrayList;
    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;
    
    /**
    * @Package:cn.ucaner.core.concurrent   
    * @ClassName:CallableDemo   
    * @Description:   <p> CallableDemo </p>
    * @Author: -    
    * @CreatTime:2018年6月12日 下午3:50:49   
    * @Modify By:   
    * @ModifyTime:  2018年6月12日
    * @Modify marker:   
    * @version    V1.0
     */
    public class CallableDemo {
        
        public static void main(String[] args) {
            
            ExecutorService exec = Executors.newCachedThreadPool();
            
            ArrayList<Future<String>> results = new ArrayList<>();
    
            for (int i = 0; i < 10; i++) {
                results.add(exec.submit(new TaskWithResult(i)));
            }
    
            for (Future<String> fs : results) {
                try {
                    System.out.println(fs.get());
                } catch (InterruptedException e) {
                    System.out.println(e);
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    System.out.println(e);
                    e.printStackTrace();
                } finally {
                    exec.shutdown();
                }
            }
        }
    }
    
    class TaskWithResult implements Callable<String> {
        private int id;
    
        public TaskWithResult(int id) {
            this.id = id;
        }
    
        @Override
        public String call() throws Exception {
            return "result of TaskWithResult  " + id;
        }
    }
    //Outputs
    //result of TaskWithResult  0
    //result of TaskWithResult  1
    //result of TaskWithResult  2
    //result of TaskWithResult  3
    //result of TaskWithResult  4
    //result of TaskWithResult  5
    //result of TaskWithResult  6
    //result of TaskWithResult  7
    //result of TaskWithResult  8
    //result of TaskWithResult  9
    /**
     * <html>
     * <body>
     *  <P> Copyright 1994 JsonInternational</p>
     *  <p> All rights reserved.  - https://github.com/Jasonandy/Java-Core-Advanced </p>
     *  <p> Created by Jason</p>
     *  </body>
     * </html>
     */
    package cn.ucaner.core.concurrent;
    
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ThreadFactory;
    
    /**
    * @Package:cn.ucaner.core.concurrent   
    * @ClassName:CaptureUncaughtException   
    * @Description:   <p> 捕捉异常</p>
    * @Author: - Jason
    * @CreatTime:2018年5月16日 下午6:10:37   
    * @Modify By:   
    * @ModifyTime:  2018年5月16日
    * @Modify marker:   
    * @version    V1.0
     */
    public class CaptureUncaughtException {
        
        public static void main(String[] args) {
            ExecutorService exec = Executors.newCachedThreadPool(
                    new HandlerThreadFactory());
            exec.execute(new ExceptionThread());
        }
    }
    
    class ExceptionThread implements Runnable {
        public void run() {
            Thread t = Thread.currentThread();
            System.out.println("run() by " + t);
            System.out.println(
                    "eh = " + t.getUncaughtExceptionHandler());
            throw new RuntimeException();
        }
    }
    
    class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
        public void uncaughtException(Thread t, Throwable e) {
            System.out.println("caught " + e + " in " + t);
        }
    }
    
    class HandlerThreadFactory implements ThreadFactory {
        public Thread newThread(Runnable r) {
            System.out.println(this + " creating new Thread");
            Thread t = new Thread(r);
            System.out.println("created " + t);
            t.setUncaughtExceptionHandler(
                    new MyUncaughtExceptionHandler());
            System.out.println(
                    "eh = " + t.getUncaughtExceptionHandler());
            return t;
        }
    }
    
    
    
    /* Output: (90% match)
    com.brianway.learning.java.concurrent.HandlerThreadFactory@266474c2 creating new Thread
    created Thread[Thread-0,5,main]
    eh = com.brianway.learning.java.concurrent.MyUncaughtExceptionHandler@6f94fa3e
    run() by Thread[Thread-0,5,main]
    eh = com.brianway.learning.java.concurrent.MyUncaughtExceptionHandler@6f94fa3e
    com.brianway.learning.java.concurrent.HandlerThreadFactory@266474c2 creating new Thread
    created Thread[Thread-1,5,main]
    eh = com.brianway.learning.java.concurrent.MyUncaughtExceptionHandler@3ff961b5
    caught java.lang.RuntimeException in Thread[Thread-0,5,main]
    *///:~
  • 相关阅读:
    Struts2SpringHibernate整合示例,一个HelloWorld版的在线书店(项目源码+详尽注释+单元测试)
    Java实现蓝桥杯勇者斗恶龙
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 226 翻转二叉树
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 225 用队列实现栈
    Java实现 LeetCode 224 基本计算器
    Java实现 LeetCode 224 基本计算器
  • 原文地址:https://www.cnblogs.com/jasonandy/p/9821509.html
Copyright © 2011-2022 走看看