当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

100行Java代码构建一个线程池[Java编程]

赞助商链接



  本文“100行Java代码构建一个线程池[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

在现代的操作系统中,有一个很重要的概念――线程,几近全部目前风行的操作系统都支持线程,线程根源于操作系统中进程的概念,进程有自己的虚拟地址空间以及正文段、数据段及仓库,并且各自占据差别的系统资源(比方文件、环境变量等等).与此差别,线程不能单独存在,它依靠于进程,只能由进程派生.假如一个进程派生出了两个线程,那这两个线程同享此进程的全局变量和代码段,但每个线程各拥有各自的仓库,因此它们拥有各自的部分变量,线程在UNIX系统中还被进一步分为用户级线程(由进程自已来管理)和系统级线程(由操作系统的调度程序来管理). 既然有了进程,为什么还要提出线程的概念呢?因为与成立一个新的进程相比,成立一个线程将会耗费小得多的系统资源,关于一些小型的利用,大概感受不到这点,但关于那些并发进程数分外多的利用,利用线程会比利用进程得到更好的性能,从而降低操作系统的负担.别的,线程同享成立它的进程的全局变量,因此线程间的通讯编程会更将简单,完好可以丢弃传统的进程间通讯的IPC编程,而采取同享全局变量来举行线程间通讯.

有了上面这个概念,我们下面就进入正题,来看一下线程池毕竟是怎么一回事?其实线程池的原理很简单,近似于操作系统中的缓冲区的概念,它的流程以下:先启动若干数目的线程,并让这些线程都处于就寝状况,当客户端有一个新恳求时,就会唤醒线程池中的某一个就寝线程,让它来处理客户端的这个恳求,当处理完这个恳求后,线程又处于就寝状况.大概你大概会问:为什么要搞得这么麻烦,假如每当客户端有新的恳求时,我就成立一个新的线程不就完了?这大概是个不错的办法,因为它能使得你编写代码相对简单一些,但你却忽视了一个重要的问题――性能!就拿我所在的单位来说,我的单位是一个省级数据大集合的银行网络中央,顶峰期每秒的客户端恳求并发数超越100,假如为每个客户端恳求成立一个新线程的话,那耗费的CPU时间和内存将是惊人的,假如采取一个拥有200个线程的线程池,那将会节俭大量的的系统资源,使得更多的CPU时间和内存用来处理实际的商业利用,而不是频繁的线程成立与销毁.

既然一切都懂得了,那我们就开始着手实现一个真正的线程池吧,线程编程可以有多种语言来实现,比方C、C++、java等等,但差别的操作系统供应差别的线程API接口,为了让你能更懂得线程池的原理而避免陷入烦琐的API调用之中,我采取了JAVA语言来实现它,由于JAVA语言是一种跨平台的语言,因此你没必要为利用差别的操作系统而无法编译运行本程序而苦恼,只要你安装了JDK1.2以上的版本,都能精确地编译运行本程序.别的JAVA语言本身就内置了线程对象,并且JAVA语言是完全面像对象的,因此可以让你更清楚地理解线程池的原理,假如你注意看一下本文的标题,你会发现整个示例程序的代码只有大约100行.

本示例程序由三个类构成,第一个是TestThreadPool类,它是一个测试程序,用来模拟客户端的恳求,当你运行它时,系统首先会显示线程池的初始化信息,然后提醒你从键盘上输入字符串,并按下回车键,这时你会发现屏幕上显示信息,奉告你某个线程正在处理你的恳求,假如你快速地输入一行行字符串,那么你会发现线程池中不断有线程被唤醒,来处理你的恳求,在本例中,我成立了一个拥有10个线程的线程池,假如线程池中没有可用线程了,系统会提醒你呼应的告诫信息,但假如你稍等半晌,那你会发现屏幕上会陆连续续提醒有线程进入了就寝状况,这时你又可以发送新的恳求了.

第二个类是ThreadPoolManager类,顾名思义,它是一个用于管理线程池的类,它的主要职责是初始化线程池,并为客户端的恳求分配差别的线程来举行处理,假如线程池满了,它会对你发出告诫信息.

最后一个类是SimpleThread类,它是Thread类的一个子类,它才真正对客户端的恳求举行处理,SimpleThread在示例程序初始化时都处于就寝状况,但假如它承遭到了ThreadPoolManager类发过来的调度信息,则会将自己唤醒,并对恳求举行处理.

首先我们来看一下TestThreadPool类的源码:

//TestThreadPool.java
1 import java.io.*;
2
3
4 public class TestThreadPool
5 {
6 public static void main(String[] args)
7 {
8 try{
9 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10 String s;
11 ThreadPoolManager manager = new ThreadPoolManager(10);
12 while((s = br.readLine()) != null)
13 {
14 manager.process(s);
15 }
16 }catch(IOException e){}
17 }
18 }
  以上是“100行Java代码构建一个线程池[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 100行Java代码构建一个线程池
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .