java线程之四(线程池)

Excutor(接口)

线程池执行器,只有一个方法excute(Runable command)

ExcutorService

继承了Excutor,并且拓展了线程池的生命周期`(shutdown结束方法,submit(Runable task T result )isShutDown等方法)

Callable

call()方法,有返回值并且可抛出异常

Future

存储将来线程执行的结果

get()方法,可获取线程池submit()方法的返回值,且是阻塞的

FutureTask

即实现了Future又实现了Task

CompletableFure

管理多个Future的结果,可以等待多个线程或某个方法同时执行完成

CompletableFure.allOf(completableFure1,completableFure2,completableFure3).join();多个线程都完成

CompletableFure.supplyAsync()

ThreadPoolExcutor

手动定义线程池ThreadPoolExcutor(corePoolSize,maximumPoolSize,keepAliveTime,TimeUnit.SECONDS ,new ArrayBlockingQueue(4),Excutors.defaultThreadFactory(),new ThreadPoolExcutor.discardOldestPolicy())

1.corePoolSize:核心线程数;

2.maximumPoolSize:最大线程数;

3.keepAliveTime:空闲时间

4.TimeUnit.SECONDS:时间单位

5.new ArrayBlockingQueue存放任务的队列

6.defaultThreadFactory:产生线程的方式,默认提供defaultThreadFactory

7.new ThreadPoolExcutor.discardOldestPolicy()拒绝策略,默认提供四种(也可自定义)

Excutors

线程池工厂

SingleThreadPool

只有一个线程,可以保证任务的执行顺序

为什么要有一个单线程的线程池?

任务队列 生命周期管理

CacheTreadPool

如果有空闲线程则不启动新线程,否则启动闲的线程,线程最大数为Integer最大数

弊端:不能控制线程数

FixedTreadPoll

固定线程数的线程池(核心线程=最大线程),

ScheduleTreadPool

定时器线程池,使用了DelayedWorkQueue指定间隔时间运行

一般用定时框架代替:quarts cron

WorkStealingPool

每个现场有自己单独的队列,自己的队列执行完了去别的队列拿任务

并行和并发有什么区别

并发指任务提交,不行是指任务执行

并行是并发的子集

ForJoinPool

分解汇总的任务

用很少的线程可以执行很多的任务(子任务)

ParallelStream

你可能感兴趣的:(java线程之四(线程池))