java创建线程池

package com.muti.threads;


import java.util.concurrent.*;


/**
 * ExecutorService
 * ExecutorService接口的实现有,ThreadPoolExecutor和ScheduledThreadPoolExcecutor。
 * ----通常选择Exectors工厂类的静态方法来创建一个线程池:
 * (1)newFixedThreadPool。将创建一个固定长度的线程池
 * (2)  newCachedThreadPool。将创建一个可缓存的线程池
 * (3)newSingleThreadPool.是一个单线程的Executor ,如果这个线程异常结束,会创建另一个线程来替代
 * (4)newScheduledThreadPool 创建了一个固定长度的线程池
 * (5)当默认的创建线程池策略无法满足要求时 ,个性化定制:
 *  public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit
 * ,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)
 *
 */
public class MyExecutorDemo {
    //执行的任务数量
    private static final int MAX = 10;
    public static void main(String args[]){
        try {
            fixedThreadPool(7);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }

    private static void fixedThreadPool (int coreSize)
            throws InterruptedException,ExecutionException {
        //创建线程池,通过Executors的静态方法newFixedThreadPool()创建线程池对象;
        ExecutorService exec = Executors.newFixedThreadPool(coreSize);
        for(int i = 0; i < MAX; i++){
            //提交任务,创建多线程的方法之一,三种选择1 ;将定义的多线程任务提交给线程池,等待线程池调用
            Future<Integer> task = exec.submit(new Callable<Integer>() {
                @Override
                public Integer call() throws Exception {
                    System.out.println("执行线程名:" + Thread.currentThread().getName());
                    return fibc(20);
                }
            });
            //获取执行结果,使用task.get()开始执行
            System.out.println("第"+i+"次计算结果为: "+task.get());
        }
    }

    //定义一个斐波那契数列
    private static int fibc(int num){
        if (num == 0){
            return 0;
        }
        if (num == 1){
            return  1;
        }
        return fibc(num-1)+fibc(num-2);
    }


}

猜你喜欢

转载自blog.csdn.net/fct2001140269/article/details/79601019