a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 79|回复: 0

[其他] JAVA技巧:Java线程池怎样体现自己的用途

[复制链接]
发表于 2012-8-4 12:28:23 | 显示全部楼层 |阅读模式
 Java线程池就像数据库连接池一样,是一个对象池。我们在使用的时候需要不断的学习,这样才能不断的适应相关语言技术的变化。所有的对象池都有一个共同的目的,那就是为了提高对象的使用率,从而达到提高程序效率的目的。   比如对于Servlet,它被设计为多线程的(如果它是单线程的,你就可以想象,当1000个人同时请求一个网页时,在第一个人获得请求结果之前,其它999个人都在郁闷地等待),如果为每个用户的每一次请求都创建一个新的线程对象来运行的话,系统就会在创建线程和销毁线程上耗费很大的开销,大大降低系统的效率。因此,Servlet多线程机制背后有一个Java线程池在支持,线程池在初始化初期就创建了一定数量的线程对象,通过提高对这些对象的利用率,避免高频率地创建对象,从而达到提高程序的效率的目的。, i' \0 D& R/ }6 Y* _
  下面实现一个最简单的Java线程池,从中理解它的实现原理。为此我们定义了四个类,它们的用途及具体实现如下:0 \1 }; N4 j" W7 v1 {
  Task(任务):这是个代表任务的抽象类,其中定义了一个deal()方法,继承Task抽象类的子类需要实现这个方法,并把这个任务需要完成的具体工作在deal()方法编码实现。Java线程池中的线程之所以被创建,就是为了执行各种各样数量繁多的任务的,为了方便线程对任务的处理,我们需要用Task抽象类来保证任务的具体工作统一放在deal()方法里来完成,这样也使代码更加规范。3 v- Q3 p! z& x3 M
  Task的定义如下:
# r$ E8 o# I6 S. i# |" O. h3 m  Java代码
5 I. [( ~, Z! o$ N2 D. J. ?  1.public abstract class Task {: C5 K, q% I' A0 o" i. W2 w
  2.public enum State {
" \6 q, P# m3 G5 Z5 K- _" K7 @  3./* 新建 */NEW, /* 执行中 */RUNNING, /* 已完成 */FINISHED
+ \; i* P4 L. C1 |  4.}7 R- [# g2 o( L+ p/ L
  5.// 任务状态! v9 F$ s8 c) I% p: }- d: A2 p
  6.private State state = State.NEW;
# q# j- K+ r' }1 Y  7.public void setState(State state) {3 ]: K& `3 k9 `8 ?% ]# A
  8.this.state = state;1 {) y$ m. N+ B3 ~8 t' H
  9.}$ C! i/ f2 A# d6 x2 ~% w
  10.public State getState() {/ W9 O+ J2 s, {/ o
  11.return state;
* s8 [6 J2 g* c+ b  12.}% F& n! r9 F& Y
  13.public abstract void deal();+ J# Q  j" [/ q4 H: s8 E7 G  J
  14.}
% h' G4 Z+ v  R; m# K3 y  15.public abstract class Task {
- c$ z: S7 t8 e2 x) w  16.public enum State {% c; m& r, h8 W; l3 q
  17./* 新建 */NEW, /* 执行中 */RUNNING, /* 已完成 */FINISHED
5 u$ r$ M7 `9 P  18.}. A* g$ x) p$ I! L: O7 f
  19.// 任务状态
6 y$ u. R: q% U/ y  20.private State state = State.NEW;$ ?7 }' Q6 P+ K4 w
  21.public void setState(State state) {
# @5 _: ~) ?$ S  22.this.state = state;+ C( t  N; F0 x- J
  23.}/ |6 [) {4 K2 ^; Q$ R8 w
  24.public State getState() {. q+ z/ l  n' M/ ]3 S7 K5 r( s: I( H
  25.return state;2 {( m! \% S4 H# G
  26.}
/ W$ q) ?! {& P% Z0 `% A  27.public abstract void deal();
) X5 ?' `7 x" m& h2 C' _% [  28.}
# V; S+ T4 U% L) U/ K- R  以上就是对Java线程池的相关代码介绍。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 08:29 , Processed in 0.142490 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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