java 多线程:
一般通过继承Thread类,实现Runnable接口,实现Callable接口,以及线程池。
这里主要是讲解线程池:
通过线程池主要是创建以下4种类型的线程池。
工具类 : Executors
ExecutorService newFixedThreadPool() : 创建固定大小的线程池
ExecutorService newCachedThreadPool() : 缓存线程池,线程池的数量不固定,可以根据需求自动的更改数量。
ExecutorService newSingleThreadExecutor() : 创建单个线程池。线程池中只有一个线程
ScheduledExecutorService newScheduledThreadPool() : 创建固定大小的线程,可以延迟或定时的执行任务。
他们之间的区别主要是:缓存队列-核心线程数-最大线程数之间的关系。
当需要加入进程时:
(1)当前线程数小于核心线程数,当前线程直接运行。
(2)当前线程数大于核心线程数,当前线程会加入到阻塞队列中,
(3)此时阻塞队列未满,直接加入,等待机会运行。
(4) 此时阻塞队列已满,但此时线程数小于最大线程数,则直接创建线程运行。
(5)此时线程数大于等于最大线程数,则实行线程池自定义的拒绝策略。
线城池的拒绝策略(四种):
AbortPolicy — 当任务添加到线程池中被拒绝时,它将抛出 RejectedExecutionException异常
CallerRunsPolicy — 当任务添加到线程池中被拒绝时,会在线程池当前正在运行的Thread线程池中处理被拒绝的任务。
DiscardOldestPolicy — 当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中。
DiscardPolicy — 当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。
多线程-线程池(队列-最大线程数-核心线程数)
最新推荐文章于 2024-08-08 12:11:30 发布