当前位置: 首页 > 图灵资讯 > java面试题> java多线程面试题-Execuors类实现线程池

java多线程面试题-Execuors类实现线程池

来源:图灵教育
时间:2024-05-19 13:10:29

newSingleThreadExecutor():只有一个线程的线程池,任务是顺序执行,适用于一个一个任务执行的场景

newCachedThreadPool():线程池里有很多线程需要同时执行,60s内复用,适用执行很多短期异步的小程序或者负载较轻的服务

newFixedThreadPool():拥有固定线程数的线程池,如果没有任务执行,那么线程会一直等待,适用执行长期的任务。

newScheduledThreadPool():用来调度即将执行的任务的线程池

newWorkStealingPool():底层采用forkjoin的Deque,采用独立的任务队列可以减少竞争同时加快任务处理

因为以上方式都存在弊端:

FixedThreadPool 和 SingleThreadExecutor :允许请求的队列⻓度为 Integer.MAX_VALUE,会导致OOM。

CachedThreadPool 和 ScheduledThreadPool :允许创建的线程数量为 Integer.MAX_VALUE,会导致OOM。

手动创建的线程池底层使用的是ArrayBlockingQueue可以防止OOM。