Java几种常见的线程池

FixedThredPool

介绍:可重用固定线程数的线程池


FixedThreadPool构造器源码

FixedThreadPool使用了无边界的任务队列,当有新任务来的时候,会首先判断当前线程数是否小于核心线程数,小于则创建新的线程来执行任务,如果大于的话会讲任务加入到LinkedBlockingQueue,当线程处理完手头的任务后,会在循环中反复从LinkedBlockingQueue中获取任务来执行,FixedThreadPool使用无边界的任务队列

SingleThreadExecutor详解

SingleThreadExecutor是只有一个线程的线程池,和FixedThreadPool类似只不过只有一个线程执行任务

CachedThreadPool详解


CacheThreadPool源码

CacheThreadPool的核心线程数被设置为0,最大线程数被设置为Integer.MAX.VALUE,即它是无界的,这就意味着如果主线程提交任务的速度高于最大线程执行的速度,CacheThreadPool会不断创建心的线程。极端情况下会导致耗尽cpu和内存资源

ScheduledThreadPoolExecutor详解

ScheduledThreadPoolExecutor使用的任务队列,会根据执行所需时间短的放在前面执行(ScheduledFutureTask的time变量小先执行),如果执行所需的时间相同则先提交的任务将被先执行ScheduledFutureTask的squenceNumber变量小的先执行

你可能感兴趣的:(Java几种常见的线程池)