线程池的常用知识

线程池常用参数

参数名 类型 含义
corePoolsize int 核心线程数
maxPoolsize int 最大线程数
keepAliveTime long 存活时间
workQueue BlockingQueue 任务存储队列
theadFactory ThreadFactory 通过该生成新的线程
Handler 拒绝策略

添加线程规则

  1. 如果线程数小于corePoolSize,即使其他工作线程处于空闲状
    态,也会创建一个新线程来运行新任务。
  2. 如果线程数等于(或大于)corePoolSize但少于
    maximumPoolSize,则将任务放入队列。
  3. 如果队列已满,并且线程数小于maxPoolSize,则创建一个新
    线程来运行任务。
  4. 如果队列已满,并且线程数大于或等于maxPoolSize,则拒绝
    该任务。

常见工作队列
1.直接交接:SynchronousQueue
2.无界队列:LinkBlockingQueue
3.有界队列;ArrayBlockingQueue

常见线程池:

1.FixedThreadPool:
创建一个固定数量的线程池
例如
ExecutorService executorService = Executors.newFixedThreadPool(5);
其具体实现为:

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

2.newCachedThreadpool
可缓存线程池
构造方法为:
ExecutorService executorService = Executors.newCachedThreadPool();
内部实现为:

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

3.ScheduledThreadPool
周期性线程池

public ScheduledThreadPoolExecutor(int corePoolSize) {
     
        super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
              new DelayedWorkQueue());
    }

4.SingleThreadExecutor
单一线程池

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

停止线程池的方法:

1.shutdown
2.shutdownnow

拒绝策略

1.AbortPolicy
2.DiscardPolicy
3.DiscardOldPolicy
4.CallerRunsPolicy
前三种会有所损失

你可能感兴趣的:(java)