a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 97|回复: 0

[专业语言] JAVA认证:Java线程池怎样体现自己的用途

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
Java线程池就像数据库连接池一样,是一个对象池。我们在使用的时候需要不断的学习,这样才能不断的适应相关语言技术的变化。所有的对象池都有一个共同的目的,那就是为了提高对象的使用率,从而达到提高程序效率的目的。   比如对于Servlet,它被设计为多线程的(如果它是单线程的,你就可以想象,当1000个人同时请求一个网页时,在第一个人获得请求结果之前,其它999个人都在郁闷地等待),如果为每个用户的每一次请求都创建一个新的线程对象来运行的话,系统就会在创建线程和销毁线程上耗费很大的开销,大大降低系统的效率。因此,Servlet多线程机制背后有一个Java线程池在支持,线程池在初始化初期就创建了一定数量的线程对象,通过提高对这些对象的利用率,避免高频率地创建对象,从而达到提高程序的效率的目的。
* p, J- Z* E, ?- R# z$ @, `0 ?$ d  下面实现一个最简单的Java线程池,从中理解它的实现原理。为此我们定义了四个类,它们的用途及具体实现如下:! j8 {0 z( }$ s  X% |+ Q
  Task(任务):这是个代表任务的抽象类,其中定义了一个deal()方法,继承Task抽象类的子类需要实现这个方法,并把这个任务需要完成的具体工作在deal()方法编码实现。Java线程池中的线程之所以被创建,就是为了执行各种各样数量繁多的任务的,为了方便线程对任务的处理,我们需要用Task抽象类来保证任务的具体工作统一放在deal()方法里来完成,这样也使代码更加规范。) o. f6 K* Y. n. J/ `. g$ K8 @  T
  Task的定义如下:5 {( m- H0 |2 P
  Java代码5 ~% D/ Z. c. D  _# }- C; y
  1.public abstract class Task {
5 q7 d, U# D. Y$ m+ W+ P  2.public enum State {
0 r/ p- z- {, J9 l% T0 n2 P" V  3./* 新建 */NEW, /* 执行中 */RUNNING, /* 已完成 */FINISHED
& |' }, k& R! z  \/ ^5 U, P2 c  4.}* l0 Q/ E+ K  @$ I9 O
  5.// 任务状态
$ i: D  O; k, l) t( X* j  6.private State state = State.NEW;
8 e4 S3 l8 j/ F$ \  7.public void setState(State state) {
  ?5 R9 U* S) N( X  8.this.state = state;! u  L" B# Q# U4 J2 E1 L1 Q* Y1 k" z
  9.}
9 z  f* w' [2 M+ Y  10.public State getState() {) F/ P7 Y1 T7 K/ g1 A' {4 ~
  11.return state;5 n; A" x: G* f2 Z5 @* y
  12.}  @* u( @' K$ i% y8 i: N
  13.public abstract void deal();. \6 d. b  m# a3 i
  14.}) _7 G6 k! U$ {3 D
  15.public abstract class Task {
7 N& Q$ Z% U: C5 o8 b  16.public enum State {
" D( k$ ~5 ], ~: b) N3 L4 \# A4 d! h8 }  17./* 新建 */NEW, /* 执行中 */RUNNING, /* 已完成 */FINISHED& q/ x) C" S5 w' q/ [/ z
  18.}
. [. g0 ^- K& I( {) _' y  19.// 任务状态
3 m8 L) Y$ {+ v7 p! k, U9 _- b  20.private State state = State.NEW;; C; F7 f+ }- q7 O
  21.public void setState(State state) {+ J6 U  A- n8 S& o3 ?
  22.this.state = state;" K% N4 z0 W5 k3 S
  23.}# @" S; W1 |: N. z6 N
  24.public State getState() {
" O/ [+ f2 s* V" c3 l: o. T  25.return state;
) T) c) N1 R3 s/ I* c9 f6 {: \  26.}% K+ p- s0 N) U
  27.public abstract void deal();
4 ~+ [' `- l* @1 Y# s  28.}! R# R2 r: q  d9 |. y4 g
  以上就是对Java线程池的相关代码介绍。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-7 06:11 , Processed in 0.164638 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表