A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小江哥 黑马粉丝团   /  2018-5-18 11:02  /  4199 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、缓存型的
  • cachedThreadPool

特点:线程池无限大,当处理第二个线程时若第一个处理完,则会继续使用第一个线程,并且该线程池如果长度超过处理需要,可以收回空闲线程,反之,则新建线程
2、固定大小的
  • fixedThreadPool

特点:线程池大小固定,如果线程池大小为3,(也就是每次同时只能处理三个,超出三个之外的就需要等待)
3、任务型的
  • scheduledThreadPool

特点:当实现的是scheduleAtFixedRate或者schedule时,支持定时和周期性任务,如果实现的是execute的话则为普通线程池可自定义线程池大小
4、单线程线程池
  • singleThreadExecutor

特点:单线程的线程池,一次最大处理量为了,超过的需要等待,不能定义线程池大小
四种线程池的特点的演示代码如下:
  • package test;
  • import java.util.concurrent.ExecutorService;
  • import java.util.concurrent.Executors;
  • import java.util.concurrent.ScheduledExecutorService;
  • import java.util.concurrent.TimeUnit;
  • public class Thread_test {
  •     static ExecutorService es = Executors.newCachedThreadPool();
  •     //static ExecutorService es = Executors.newFixedThreadPool(3);
  •     //static ExecutorService es = Executors.newScheduledThreadPool(3);
  •     //static ExecutorService es = Executors.newSingleThreadExecutor();
  •     public static void doTest() {
  •     //  (CachedThreadPool,FixedThreadPool)
  •          es.execute(new Runnable() {
  •             public   void run() {
  •                 System.out.println("执行了--");
  •                 try {
  •                     Thread.sleep(2000);//线程休眠2秒
  •                 } catch (InterruptedException e) {
  •                     // TODO Auto-generated catch block
  •                     e.printStackTrace();
  •                 }
  •             }
  •         });
  • //     (ScheduledThreadPool)
  • //       ((ScheduledExecutorService) es).scheduleAtFixedRate(new Runnable() {
  • //              int i=1;
  • //              @Override
  • //              public void run() {
  • //              
  • //              int time=3*i;
  • //              System.out.println("距离第一次打印已经过了"+time+"秒");
  • //              i++;
  • //              }
  • //              //}, 3, TimeUnit.SECONDS);//延迟三秒执行(定时执行的方法为schedule)
  • //              }, 1, 3, TimeUnit.SECONDS);//每三秒执行一次
  •     }
  •     public static void main(String[] args) {
  •     for (int i = 0; i < 12; i++) {
  •         doTest();
  •     }
  •     }
  • }



1 个回复

倒序浏览
我来占层楼啊   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马