什么是线程池?线程池的工作原理和使用线程池的好处

一个线程池管理了一组工作线程,同时它还包括了一个用于放置等待执行任务的任务队列(阻塞队列)
默认情况下,在创建了线程池后,线程池中的线程数为0.当任务提交给线程池之后的处理策略如下:
1:如果此时线程池中的数量小于corePoolSize(核心池的大小),即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务(也就是说每来一个任务,就要创建一个线程来执行任务)
2:如果此时线程池中的数量大于等于corePoolSize ,但是缓冲队列workQueue未满,那么任务被放入缓冲队列,则该任务会等待空闲线程将其取出去执行。
3:如果此时线程池中的数量大于等于corePoolSize,缓冲队列也满了,但是线程池中的数量小于maximumPoolSize(线程池最大线程数),此时就会建新的线程来处理被添加的任务。
4:如果此时线程池中的数量大于等于corePoolSize,缓冲队列满,线程池中的数量等于maximumPoolSize,那么通过RejectedExecutionHandler所指定的任务拒绝策略来处理此任务。
5:特别注意,在 corePoolSize 和 maximumPoolSize 之间的线程数会被自动释放。当线程池中线程数量大于 corePoolSize 时,如果某线程空闲时间超过 keepAliveTime,线程将被终止,直至线程池中的线程数目不大于 corePoolSize。这样,线程池可以动态的调整池中的线程数。

线程池的好处~
1:通过重复利用已创建的线程,减少在创建和销毁线程上所花的时间以及系统资源的开销。
2:提高响应速度,当任务到达时,任务可以不需要等到线程创建就可以立即执行。
3:提高线程的可管理性,使用线程池可以对线程进行统一的分配和监控。
4:如果不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存。

线程池的注意事项:
1:线程池的大小:多线程应用并非线程越多越好。需要根据系统运行的硬件环境以及应用本身的特点决定线程池的大小。一般来说,如果代码结构合理,线程数与cpu数量相适合即可。如果线程运行时可能出现阻塞现象,可相应增加池的大小、如果有必要可采用自适应算法来动态调整线程池的大小。以提高cpu的有效利用率和系统的整体性能。
2:并发错误:多线程应用要特别注意并发错误,要从逻辑上保证程序的正确性,注意避免死锁现象的发生。
3:线程泄露:这是线程池应用中的一个严重的问题、当任务执行完毕而线程没能返回池中就会发生线程泄露现象。

你可能感兴趣的:(JAVA,线程池)