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

线程池

时间:2018-04-08 00:15:37      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:work   情况   handle   adp   rgs   sch   ade   imp   创建线程   

通过Executor创建线程池

Executor.newFixedTreadPool 

 public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }

内部通过new ThreadPoolExecutor创建线程池

返回一个固定数量的线程池。如果线程池中有空闲线程则直接交给空闲线程执行。如果没有将任务放到队列

 

Executor.newSingleThreadExecutor 

 public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }

 

返回一个线程的线程池,如有空闲则执行,没有则将任务放到队列中等待

Executor.newCachedTreadPool 

 public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }

 

返回一个根据实际情况调整线程个数的线程池塘 不限制最大线程数,如果有空闲线程则直接交给空线程执行 没有则创建,线程空闲超过60秒则指定回收

Exucutor.newScheduledThreadPool 

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
        return new ScheduledThreadPoolExecutor(corePoolSize);
    }


  public ScheduledThreadPoolExecutor(int corePoolSize) {
        super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
              new DelayedWorkQueue());
    }
public class ScheduledThreadPoolExecutor
        extends ThreadPoolExecutor
        implements ScheduledExecutorService

可以发现还是通过ThreaPoolExecutor实现 队列使用DeayedWorkQueue

返回SchededExecutoryService对象

可以实现定时任务

 public static void main(String[] args) throws InterruptedException {
       ScheduledExecutorService scheduledExecutorService= Executors.newScheduledThreadPool(1);
       scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
           @Override
           public void run() {
               System.out.println("11");
           }
       },1,3,TimeUnit.SECONDS);
      // 1为延迟多久执行  3为轮训时间  TimeUnit.seconds为 时间单位
    }

 

自定义线程池

ThreadPoolExecutor的构造函数
 public ThreadPoolExecutor(int corePoolSize,//核心线程数量 (默认线程数量)
                              int maximumPoolSize,//最大线程数量(如果没有超过最大线程数量 没有空闲线程则创建)
                              long keepAliveTime,//线程的生命周期
                              TimeUnit unit,//keepAliveTime时间单位
                              BlockingQueue<Runnable> workQueue,//若没有空闲线程 任务放置的队列
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)//队列有有界队列。如果任务队列满了以后。拒绝的任务的自定义操作

线程池

标签:work   情况   handle   adp   rgs   sch   ade   imp   创建线程   

原文地址:https://www.cnblogs.com/LQBlog/p/8735356.html

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