京口新闻网

2016.8.12  星期五

线程池的概念以及执行流程等基础知识

线程池是程序员在学习java编程开发技术的时候需要重点掌握的一个编程知识点,而今天我们就通过案例分析来了解一下,线程池的概念以及执行流程等基础知识。线程池的概念以及执行流程等基础知识1、线程池概念线程池:简单理解,它就是一个管理线程的池子。它帮我们管理线程,避免增加创建线程和销毁线程的资源损耗。因为线程其实也是一个对象,创建一个对象,需要经过类加载过程,销毁一个对象,需要走GC垃圾回收流程,都是需要资源开销的。提高响应速度。如果任务到达了,相对于从线程池拿线程,重新去创建一条线程执行,速度肯定慢很多。重复利用。线程用完,再放回池子,可以达到重复利用的效果,节省资源。2、线程池任务执行线程池执行流程,即对应execute()方法:提交一个任务,线程池里存活的核心线程数小于线程数corePoolSize时,线程池会创建一个核心线程去处理提交的任务。如果线程池核心线程数已满,即线程数已经等于corePoolSize,一个新提交的任务,会被放进任务队列workQueue排队等待执行。当线程池里面存活的线程数已经等于corePoolSize了,并且任务队列workQueue也满,判断线程数是否达到maximumPoolSize,即大线程数是否已满,如果没到达,创建一个非核心线程执行提交的任务。如果当前的线程数达到了maximumPoolSize,还有新的任务过来的话,直接采用拒绝策略处理。3、四种拒绝策略AbortPolicy(抛出一个异常,默认的)DiscardPolicy(直接丢弃任务)DiscardOldestPolicy(丢弃队列里老的任务,将当前这个任务继续提交给线程池)CallerRunsPolicy(交给线程池调用所在的线程进行处理)4、线程池异常处理在使用线程池处理任务的时候,任务代码可能抛出RuntimeException,抛出异常后,线程池可能捕获它,也可能创建一个新的线程来代替异常的线程,我们可能无法感知任务出现了异常,因此我们需要考虑线程池异常情况。5、线程池特点:核心线程数和大线程数大小一样没有所谓的非空闲时间,即keepAliveTime为0阻塞队列为无界队列LinkedBlockingQueue工作机制:6、提交任务如果线程数少于核心线程,创建核心线程执行任务如果线程数等于核心线程,把任务添加到LinkedBlockingQueue阻塞队列如果线程执行完任务,去阻塞队列取任务,继续执行。【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。

上一篇:MySQL服务器对索引的应用分析
下一篇:没有了