java 线程 线程池

得要明白线程池的基础结构

创建函数:

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue) {
    this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
         Executors.defaultThreadFactory(), defaultHandler);
}

描述:线程池结构分两个部分一个多个正在运行的线程(工作线程),一个就是等待运行的队列(等待队列)(是不是跟秒杀神似,其实应该说秒杀跟它神似)

corePoolSize

线程池启动时一次性启动线程数量

maximumPoolSize

线程池运行过程中最多运行线程数量,多了直接进入等待队列。

keepAliveTime

线程会由于需要其他资源处于等待,比如等到输入,等待超过这个时间,线程会被停止。

unit
keepAliveTime的时间单位

workQueue

等待运行队列

Executors.defaultThreadFactory()

ThreadFactory 一般用它给线程命名



newFixedThreadPool(本人使用最多)

创建函数:

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

描述:创建定长线程池

说明:

 
corePoolSize=maximumPoolSize=nThreads
LinkedBlockingQueue

linked无数量限制,Block阻塞的

1.新来线程立刻就投入运行,大于nThreads,进入等待队列。

问题:

1.等待队列越来越多。

newCachedThreadPool

创建函数:

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

描述:创建无限大线程池

说明:

corePoolSize=0;
maximumPoolSize=最大整数

问题:

1.无限线程运行,一个线程需要一部分的内存,最后不行了就OOM


newScheduledThreadPool(不常用)

创建函数:

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

描述:创建定长线程池,周期定时执行

说明:略

问题:略












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值