基本概念
线程池顾名思义线程的池子。
工作者线程和任务队列2个概念组成。
工作者线程主要线程就是一个循环,循环从对列中接受任务执行,任务队列则是保存待执行的任务。
线程池其优点是可以重用线程,避免创建大量的线程,也避免了创建线程的开销。
线程池的基本属性
java中线程池的实现类是ThreadPoolExecutor.
线程池的大小和以下四个参数相关。
1.corePoolSize:核心线程数。
2.maximumPoolSize:最大线程个数。
3.keepAliveTime和unit:空闲线程存活时间。
逻辑是这样的:创建一个线程池后,里面没有一个线程,当新任务到来时,如果当前线程个数小于corePoolSize,无论是否有空闲线程,都创建线程,直到=corePoolSize,而大于corePoolSize后就会进入队列里面排队,如果队列满了,那么就会创建新的线程直到数量达到maximumPoolSize。而keepAliveTime则是当当前线程数目大于corePoolSize时,空闲线程时间达到了这个值,那么这个线程就会被终结掉。
任务拒绝策略:就是上述中maximumPoolSize的任务队列都满了。新任务来了,如何处理?
默认会抛出异常,类型是RejectedExecutionException。
ThreadPoolExecutor.AbortPolicy:这就是默认的方式,抛出异常
ThreadPoolExecutor.DiscardPolicy:静默处理,忽略新任务,不抛异常,也不执行
ThreadPoolExecutor.DiscardOldestPolicy:将等待时间最长的任务扔掉,然后自己排队
ThreadPoolExecutor.CallerRunsPolicy:在任务提交者线程中执行任务,而不是交给线程池中的线程执行预配置好线程池。
工厂类Executor提供了一些预制好的线程池
我大概是大三下开学才开始准备前端,也算是拿到日常实习了