qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

Java线程池如何体现自己的用途

  Java线程池就像数据库连接池一样,是一个对象池。我们在使用的时候需要不断的学习,这样才能不断的适应相关语言技术的变化。所有的对象池都有一个共同的目的,那就是为了提高对象的使用率,从而达到提高程序效率的目的。

  比如对于Servlet,它被设计为多线程的(如果它是单线程的,你就可以想象,当1000个人同时请求一个网页时,在第一个人获得请求结果之前,其它999个人都在郁闷地等待),如果为每个用户的每一次请求都创建一个新的线程对象来运行的话,系统就会在创建线程和销毁线程上耗费很大的开销,大大降低系统的效率。因此,Servlet多线程机制背后有一个Java线程池在支持,线程池在初始化初期就创建了一定数量的线程对象,通过提高对这些对象的利用率,避免高频率地创建对象,从而达到提高程序的效率的目的。

  下面实现一个最简单的Java线程池,从中理解它的实现原理。为此我们定义了四个类,它们的用途及具体实现如下:

  Task(任务):这是个代表任务的抽象类,其中定义了一个deal()方法,继承Task抽象类的子类需要实现这个方法,并把这个任务需要完成的具体工作在deal()方法编码实现。Java线程池中的线程之所以被创建,就是为了执行各种各样数量繁多的任务的,为了方便线程对任务的处理,我们需要用Task抽象类来保证任务的具体工作统一放在deal()方法里来完成,这样也使代码更加规范。

  Task的定义如下:

  Java代码

1.public abstract class Task {
2.public enum State {
3./* 新建 */NEW, /* 执行中 */RUNNING, /* 已完成 */FINISHED
4.}
5.// 任务状态
6.private State state = State.NEW;
7.public void setState(State state) {
8.this.state = state;
9.}
10.public State getState() {
11.return state;
12.}
13.public abstract void deal();
14.}
15.public abstract class Task {
16.public enum State {
17./* 新建 */NEW, /* 执行中 */RUNNING, /* 已完成 */FINISHED
18.}
19.// 任务状态
20.private State state = State.NEW;
21.public void setState(State state) {
22.this.state = state;
23.}
24.public State getState() {
25.return state;
26.}
27.public abstract void deal();
28.}

  以上就是对Java线程池的相关代码介绍。

posted on 2012-02-08 16:50 顺其自然EVO 阅读(134) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜