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线程池的使用方式,及核心运行原理

并发编程系列:Java线程池的使用方式,核心运行原理以及注意事项

看了就能学会的Java线程池技术

深入源码分析Java线程池的实现原理

深入源码分析Java线程池的实现原理

深入分析java线程池的实现原理