线程池的类型和原理

参考文章:
Java线程池的四种创建方式 - 绝不妥协绝不低头 - 博客园 (cnblogs.com)
JAVA线程池原理详解一 - 冬瓜蔡 - 博客园 (cnblogs.com)

1.定长线程池

newFixedThreadPool(2)
核心线程和线程总数一样

   ExecutorService newFixedThreadPool=Executors.newFixedThreadPool(2);
        for(int j=0;j<4;j++){
            final  int index=j;
            newFixedThreadPool.execute(new MyRunnable(index));
        }

2.定长线程池,支持周期性或者定时任务。

newScheduleThreadPool
核心线程是固定的,线程总数是Integer.Max

 ScheduledExecutorService newScheduleThreadPool= Executors.newScheduledThreadPool(2);
        for(int k=0;k<4;k++){
           final  int index=k;
            //执行结果:延迟三秒之后执行,除了延迟执行之外和newFixedThreadPool基本相同,可以用来执行定时任务
            newScheduleThreadPool.schedule(new MyRunnable(index),3, TimeUnit.SECONDS);
        }

3.可缓存线程池

newCachedThreadPool
核心线程数为0,线程总数为Integer.Max

  ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
        for(int i=0;i<4;i++) {
            final int index=i;
            newCachedThreadPool.execute(new MyRunnable(index));
        }

4.单线程池

newSingleThreadExecutor
核心线程数和线程总数都是1

  ExecutorService newSingleThreadExtutor=Executors.newSingleThreadExecutor();
        for(int l=0;l<4;l++){
            final int index=l;
            //执行结果:只存在一个线程,顺序执行
            newSingleThreadExtutor.execute(new MyRunnable(index));
        }

5.自定义线程池

    LinkedBlockingQueue  queue=new LinkedBlockingQueue();
      ThreadPoolExecutor   theadPool=new 
  ThreadPoolExecutor(2,4,10,TimeUnit.SECONDS,queue);

6.线程池原理
JAVA线程池原理详解一 - 冬瓜蔡 - 博客园 (cnblogs.com)

你可能感兴趣的:(线程池的类型和原理)