码迷,mamicode.com
首页 > 编程语言 > 详细

线程池

时间:2020-03-19 22:02:05      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:workqueue   OLE   max   类型   创建   runnable   epo   构造   eth   

类似于一个池子,可以存放/管理线程
1.使用线程池的好处
     第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
     第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
     第三:提高线程的可管理性

2.如何使用线程池
2.1线程池分类
线程池顶级类ThreadPoolExecutor最终实现Executor接口,在JUC包下,通过Executors类可以创建不同类型的线程池,分类如下
   1.newScheduledThreadPool 定时任务线程池,可以设置任务时间
   2.newFixedThreadPool 定长线程池
   3.newSingleThreadExecutor 利用的是单线程,单线程处理任务,一般不用
   4.newCachedThreadPool 带缓存的线程池
2.2 构建线程池
1.newCachedThreadPool线程池,可缓存,可以重复利用
      

//构建一个线程池,可以重复利用线程
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 1; i <=10 ; i++) {
//创建线程池
executorService.execute(()->{
System.out.println("创建线程池"+Thread.currentThread().getName());
});
}

 


2.newFixedThreadPool创建一个固定线程数量的线程池
   

//构建线程池对象
ExecutorService executorService = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; i++) {
//创建线程
executorService.execute(()->{
System.out.println("创建线程:"+Thread.currentThread().getName());
});
}

 


3.newScheduledThreadPool
   

//创建一个线程池
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);
for (int i = 0; i < 10; i++) {
scheduledExecutorService.schedule(()->{
System.out.println("创建线程:"+Thread.currentThread().getName());
},1000, TimeUnit.MILLISECONDS);
}

 


4.newSingleThreadExecutor单线程池
 

//创建一个线程池
ExecutorService executorService = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {
executorService.execute(()->{
System.out.println("创建线程:"+Thread.currentThread().getName());
});
}

 



3.所有的线程池分类底层调用的都是ThreadPoolExecutor()构造方法,该构造方法中每一个参数含义
    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue)
      1.corePoolSize代表核心线程池大小,当有任务时,会创建对应线程处理对应任务,当线程到达一定数量后,则会缓存到队列当中,不会再次创建新的线程
      2.maximumPoolSize: 线程池最大线程数,它表示在线程池中最多能创建多少个线程
      3.keepAliveTime: 表示线程没有任务执行时最多保持多久时间会终止。
      4.unit: 参数keepAliveTime的时间单位,有7种取值,在TimeUnit类中有7种静态属性

4.如何确定线程池中创建线程数量
  考虑CPU密集和IO密集,如果不考虑IO情况下,一般是处理器数量+1,如果考虑IO,则处理器*2

线程池

标签:workqueue   OLE   max   类型   创建   runnable   epo   构造   eth   

原文地址:https://www.cnblogs.com/liuying23/p/12527116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!