a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 107|回复: 0

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

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
Java线程池就像数据库连接池一样,是一个对象池。我们在使用的时候需要不断的学习,这样才能不断的适应相关语言技术的变化。所有的对象池都有一个共同的目的,那就是为了提高对象的使用率,从而达到提高程序效率的目的。   比如对于Servlet,它被设计为多线程的(如果它是单线程的,你就可以想象,当1000个人同时请求一个网页时,在第一个人获得请求结果之前,其它999个人都在郁闷地等待),如果为每个用户的每一次请求都创建一个新的线程对象来运行的话,系统就会在创建线程和销毁线程上耗费很大的开销,大大降低系统的效率。因此,Servlet多线程机制背后有一个Java线程池在支持,线程池在初始化初期就创建了一定数量的线程对象,通过提高对这些对象的利用率,避免高频率地创建对象,从而达到提高程序的效率的目的。6 W6 K: w% K) H, c
  下面实现一个最简单的Java线程池,从中理解它的实现原理。为此我们定义了四个类,它们的用途及具体实现如下:8 ~. W" b! Q! X' L
  Task(任务):这是个代表任务的抽象类,其中定义了一个deal()方法,继承Task抽象类的子类需要实现这个方法,并把这个任务需要完成的具体工作在deal()方法编码实现。Java线程池中的线程之所以被创建,就是为了执行各种各样数量繁多的任务的,为了方便线程对任务的处理,我们需要用Task抽象类来保证任务的具体工作统一放在deal()方法里来完成,这样也使代码更加规范。+ |4 K* Z5 \* Z
  Task的定义如下:- g' L4 i1 A, I. \9 t0 {1 ?
  Java代码: B( y0 P+ K4 p
  1.public abstract class Task {
% ?3 l8 I7 l) y. Q1 M' u  2.public enum State {
9 S( P+ E( b/ d$ W- O9 ]  3./* 新建 */NEW, /* 执行中 */RUNNING, /* 已完成 */FINISHED
7 t3 g% |' \/ \5 l3 c  4.}
( e' X% c: n' |7 `( f  5.// 任务状态
  P5 v2 N: p1 ]% v1 q  6.private State state = State.NEW;
5 \- f# \2 b- Z. W: ?1 _) V% Z1 x  7.public void setState(State state) {9 H/ o- O% b" e) Y4 l
  8.this.state = state;7 {2 z; v! b, ?2 V* w
  9.}! s+ ^% f% x+ L9 W) `
  10.public State getState() {
; k' a/ a# P. m9 f3 b  11.return state;
: o$ E3 E9 V5 R% S: g  12.}9 E. z7 L2 e) e
  13.public abstract void deal();" h/ F4 s3 S4 N, a: ^& ~. n
  14.}
' [' i/ y, s$ x: |2 Y  15.public abstract class Task {- z' N7 c5 Q# c. O" l. j! i+ d+ b
  16.public enum State {: m( {# o! w7 ^
  17./* 新建 */NEW, /* 执行中 */RUNNING, /* 已完成 */FINISHED
9 ?  U6 q- Q; M8 c- v9 U$ E8 W  18.}
) M4 U! }2 P$ F6 s9 k1 _  R  19.// 任务状态% a+ F. s- L) K. ?% P
  20.private State state = State.NEW;; ^; U) T/ G/ x6 J& G# x$ ?9 _
  21.public void setState(State state) {2 T1 I7 U5 Z% b7 y. f
  22.this.state = state;
! i& N/ ^% r* c. o6 {  23.}& _8 x" J0 S# U
  24.public State getState() {
$ _0 Y! u8 q" q& x3 q  25.return state;; e2 u0 \( R* |' w9 v- a
  26.}# t2 x2 j- j+ U7 j0 {6 d9 K. f
  27.public abstract void deal();# G/ X5 W$ i4 Y& j9 F- p% b) O9 L
  28.}! h. o* J$ s( j. \- T4 K0 m
  以上就是对Java线程池的相关代码介绍。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-26 11:11 , Processed in 0.168528 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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