码迷,mamicode.com
首页 > 编程语言 > 详细

Java高新技术—线程池的使用

时间:2016-02-09 01:12:46      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:

一. 问题引入

      我们知道可以用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高新技术—线程池的使用

标签:

原文地址:http://www.cnblogs.com/chenjinsen/p/5185318.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!