成品网站好吗,别人做的网站怎么seo优化,网页设计素材推荐,桂平百度seo1、线程池的好处
第一#xff1a;降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
第二#xff1a;提高响应速度。当任务到达时#xff0c;任务可以不需要等到线程创建就能立即执行。
第三#xff1a;提高线程的可管理性。线程是稀缺资源#x…1、线程池的好处
第一降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
第二提高响应速度。当任务到达时任务可以不需要等到线程创建就能立即执行。
第三提高线程的可管理性。线程是稀缺资源如果无限制地创建不仅会消耗系统资源
还会降低系统的稳定性使用线程池可以进行统一分配、调优和监控。但是要做到合理利用线程池必须对其实现原理了如指掌。
2、线程池的实现原理核心线程数、阻塞队列、最大线程数、拒绝策略、过期时间
1如果当前运行的线程少于corePoolSize则创建新线程来执行任务注意执行这一步骤需要获取全局锁。
2如果运行的线程等于或多于corePoolSize则将任务加入BlockingQueue。
3如果无法将任务加入BlockingQueue队列已满则创建新的线程来处理任务注意执行这一步骤需要获取全局锁。
4如果创建新线程将使当前运行的线程超出maximumPoolSize任务将被拒绝并调RejectedExecutionHandler. rejectedExecution()方法。
5当线程处于空闲状态超过过期时间线程就会被回收
ThreadPoolExecutor采取上述步骤的总体设计思路是为了在执行execute()方法时尽可能地避免获取全局锁那将会是一个严重的可伸缩瓶颈。在ThreadPoolExecutor完成预热之后当前运行的线程数大于等于corePoolSize几乎所有的execute()方法调用都是执行步骤2而步骤2不需要获取全局锁。
3、创建一个线程池时需要输入的参数
1corePoolSize线程池的基本大小当提交一个任务到线程池时线程池会创建一个线
程来执行任务即使其他空闲的基本线程能够执行新任务也会创建线程等到需要执行的任
务数大于线程池基本大小时就不再创建。如果调用了线程池的prestartAllCoreThreads()方法
线程池会提前创建并启动所有基本线程。
2runnableTaskQueue任务队列用于保存等待执行的任务的阻塞队列。可以选择以下几个阻塞队列。
·ArrayBlockingQueue是一个基于数组结构的有界阻塞队列此队列按FIFO先进先出原则对元素进行排序。
·LinkedBlockingQueue一个基于链表结构的阻塞队列此队列按FIFO排序元素吞吐量通常要高于ArrayBlocking Queue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列。
·SynchronousQueue一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作否则插入操作一直处于阻塞状态吞吐量通常要高于Linked-BlockingQueue静态工厂方法Executors.newCachedThreadPool使用了这个队列。
·PriorityBlockingQueue一个具有优先级的无限阻塞队列。
3maximumPoolSize线程池最大数量线程池允许创建的最大线程数。如果队列满了并且已创建的线程数小于最大线程数则线程池会再创建新的线程执行任务。值得注意的是如果使用了无界的任务队列这个参数就没什么效果。
4ThreadFactory用于设置创建线程的工厂可以通过线程工厂给每个创建出来的线程设置更有意义的名字。使用开源框架guava提供的ThreadFactoryBuilder可以快速给线程池里的线程设置有意义的名字
5RejectedExecutionHandler饱和策略当队列和线程池都满了说明线程池处于饱和状态那么必须采取一种策略处理提交的新任务。这个策略默认情况下是AbortPolicy表示无法处理新任务时抛出异常。在JDK 1.5中Java线程池框架提供了以下4种策略。
·AbortPolicy直接抛出异常。
·CallerRunsPolicy只用调用者所在线程来运行任务。
·DiscardOldestPolicy丢弃队列里最近的一个任务并执行当前任务。
·DiscardPolicy不处理丢弃掉。
当然也可以根据应用场景需要来实现RejectedExecutionHandler接口自定义策略。如记录日志或持久化存储不能处理的任务。
·keepAliveTime线程活动保持时间线程池的工作线程空闲后保持存活的时间。所以如果任务很多并且每个任务执行的时间比较短可以调大时间提高线程的利用率。
·TimeUnit线程活动保持时间的单位可选的单位有天DAYS、小时HOURS、分钟MINUTES、毫秒MILLISECONDS、微秒MICROSECONDS千分之一毫秒和纳秒NANOSECONDS千分之一秒。