Java高新技术—线程池的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java高新技术—线程池的使用相关的知识,希望对你有一定的参考价值。
一. 问题引入
我们知道可以用1.继承Thread类 2.实现runnable接口两种方法创建一个线程,这样实现起来很方便,但是同样出现了一个问题:
如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,
因为频繁创建线程和销毁线程需要时间。
那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?
在Java中可以通过线程池来达到这样的效果!
二. 线程池简介
① Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用。为我们在开发中处理线程的问题提供了非常大的帮助。
② 线程池工作原理:
1. 线程池是一种预先创建线程的技术,线程池在还没有任务到来时预先创建一定数量的线程,放入空闲队列中。
这些线程都处于睡眠状态,不消耗CPU,所以只是占用比较少的内存
2. 当请求到来后,线程池给这次请求分配一个空闲线程,把请求传入线程中进行处理
3. 当线程池预先设置的线程数目不能满足需求出现太多或者太少,可以通过手动调整
③ 线程池的好处
1. 减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
2. 可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约
1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。
三. 线程池入门
Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而只是一个执行线程的工具。
而真正的线程池接口是ExecutorService。
线程池最重要的四个类如下:
ExecutorService |
真正的线程池接口。 |
ScheduledExecutorService |
能和Timer/TimerTask类似,解决那些需要任务重复执行的问题。 |
ThreadPoolExecutor |
ExecutorService的默认实现。 |
ScheduledThreadPoolExecutor |
继承ThreadPoolExecutor的ScheduledExecutorService接口实现,周期性任务调度的类实现。 |
以上是关于Java高新技术—线程池的使用的主要内容,如果未能解决你的问题,请参考以下文章
Java多线程系列:Java线程池的使用方式,及核心运行原理