线程池:有几种、哪些参数、状态及执行过程

线程池

通常通过java.util.concurrent包提供的ThreadPoolExecutor类来实现。ThreadPoolExecutor类有七个参数:

​ 1. corePoolSize:核心线程池大小10

​ 2. maximumPoolSize:线程池最大线程数11

​ 3. keepAliveTime:线程空闲时间

​ 4. unit:keepAliveTime的时间单位

​ 5. workQueue:任务队列

​ 6. threadFactory:线程工厂

​ 7. RejectHandler:拒绝策略(有四种1.CallerRunsPolicy:在任务被拒绝添加后,会在调用者线程中直接执行被拒绝的任务 2.DiscardPolicy:直接丢弃被拒绝的任务,不做任何处理 3.AbortPolicy:直接抛出 RejectedExecutionException 异常 4.DiscardOldestPolicy:将最早被放入等待队列的任务丢弃,然后将新任务加入等待队列)

四种线程池

​ 1. FixedThreadPool:固定大小线程池:

​ 2. CachedThreadPool缓存线程池:

​ 3. SingleThreadPool单线程池:

​ 4. ScheduledThreadPool定时线程池

线程池状态

​ 1. RUNNING:线程池处于正常运行状态,可以接受新的任务并处理已有的任务。

​ 2. SHUTDOWN:线程池不再接受新的任务,但是会处理完队列中已有的任务。

​ 3. STOP:线程池不再接受新的任务,并且会尝试中断正在执行的任务。

​ 4. TIDYING:线程池中的所有任务都已经执行完毕,正在进行资源回收和清理工作。

​ 5. TERMINATED:线程池已经被完全终止,不再接受新的任务并且已经释放所有的资源。

通过ThreadPoolExecutor类的getPoolSize()方法获取当前线程池中的线程数量,

通过getActiveCount()方法获取正在执行任务的线程数量,

通过getTaskCount()方法获取已经提交但还未执行的任务数量。

通过shutdown()、shutdownNow()等方法来改变线程池的状态,以达到暂停或终止线程池的目的

执行过程

​ 1. 创建线程池:创建一个线程池对象,指定线程池中包含的线程数。

​ 2. 提交任务:通过execute()方法向线程池提交任务,任务会被封装成一个Runnable对象并添加到任务队列中等待执行。

​ 3. 判断任务队列:线程池中的线程会不断从任务队列中取出任务执行,如果任务队列中没有任务,则线程会等待直到任务队列中有新的任务。

​ 4. 执行任务:线程池中的线程会按照FIFO(先进先出)的顺序从任务队列中取出任务执行,当一个线程执行完任务后,它会继续取出下一个任务执行,直到线程池中的所有线程都处于空闲状态或线程池被关闭。

​ 5. 关闭线程池:调用shutdown()或shutdownNow()方法关闭线程池,线程池会拒绝接受新的任务并尝试停止已有的任务执行,同时会等待所有线程执行完毕并释放资源 shutdown()是会等待所有已经提交的任务执行完成,再关闭。 shutdownNow()则是让线程池会立即停止所有正在执行的任务,并尝试中断所有处于等待状态的线程,同时返回一个未执行的任务列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值