线程池
线程池7大参数
- corePoolSize:核心线程数,线程空闲时也不会销毁,除非设置允许销毁
- maximumPoolSize:最大线程数,最多允许这么多线程允许,在这些线程空闲之后会根据线程存活时间过期而消亡
- keepAliveTime:线程存活时间,指超过核心线程数的空闲线程,超过这个时间就会被销毁
- unit:线程存活时间单位
- workQueue:工作队列。指任务的提交超过最大线程数,那么剩余的任务就会被放入队列
- threadFactory:线程工厂,指创建线程的方式
- handler:队列满了,拒绝处理方式。包括:抛弃旧任务执行新任务、直接丢弃、直接丢弃并抛出异常、由主线程继续执行
执行过程
(1)、创建线程池时,初始化核心线程池,等待任务提交直接交给核心线程池处理
(2)、核心线程池慢,新来的任务放入等待队列,最大线程池启动线程进行处理
(3)、最大线程池使用完毕,队列也满了,使用决绝策略
(4)、最大线程池的线程处理完任务之后,经过线程存活时间(注意时间单位)后,进行销毁
(5)、核心线程池不会销毁,而是继续等任务
异步执行-CompletableFuture
runAsync
1、运行任务,无返回结果
supplyAsync
1、运行任务,有返回结果(泛型接收与返回)
thenAccept
1、根据返回结果,继续执行代码。最终无返回结果
thenApply
1、根据返回结果,继续执行代码。最终有返回结果(泛型接收与返回)
thenRun
1、先前的任务执行完毕,以不要结果的方式执行另外一个任务
handle
1、根据返回结果,继续执行代码。最终有返回结果(泛型接收与返回),用来处理结果
runAfterBoth
1、同时运行主任务和入参任务,都完成之后,在进行第三个任务,第三个任务没有前两个任务的值
thenAcceptBothAsync
1、同时运行主任务和入参任务,都完成之后,在进行第三个任务,第三个任务有前两个任务的值,但没返回值
thenCombineAsync
1、同时运行主任务和入参任务,都完成之后,在进行第三个任务,第三个任务有前两个任务的值,有返回值
runAfterEitherAsync
1、同时运行主任务和入参任务,任意一个完成之后,再进行第三个任务,没有入参、没有返回值
acceptEitherAsync
1、同时运行主任务和入参任务,任意一个完成之后,再进行第三个任务,有入参、没有返回值
applyToEitherAsync
1、同时运行主任务和入参任务,任意一个完成之后,再进行第三个任务,有入参、有返回值
allOf
1、等待提交的所有的异步线程执行完毕
anyOf
1、等待提交的异步线程执行,任意一个执行完毕,则完成
多线程
CountDownLatch countDownLatch = new CountDownLatch(2);
CyclicBarrier cyclicBarrier = new CyclicBarrier(2);
Semaphore semaphor = new Semaphore(1);