网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.自我参考:Java学习的30个目标.
.深入浅出Java设计之备忘录模式.
.CLASSPATH以及包和目录结构的关系.
.EJB3.0概览以及新版本的诸多进步.
.用JavaBean实现文件上载(2).
.用JBuilder2005开发spring MVC应.
.让第一个jdo的应用跑起来.
.桌面系统的第二次战役--难解难分.
.面向对象编程:Java collection更.
.getUTCSeconds 方法.
.用Java调用VC音量控制程序.
.JDBC Error establishing socket.
.Java核心代码例程之:JavaMail--.
.servlet规范定义的Servlet 生命周.
.用ActionForward优化你的Struts应.
.Java 基本语法(二)——变量和常.
.JAVA入门教程:数据类型.
.用JavaBean实现文件上载(5).
.JAVA构造函数运行解析.
.新手入门Eclipse插件的安装与配置.

Java学习:线程池的简单构建

发表日期:2008-1-5


  现在服务器端的应用程序几乎都采用了“线程池”技术,这主要是为了提高系统效率。
因为假如服务器对应每一个请求就创建一个线程的话,在很短的一段时间内就会产生很多创建和销毁线程动作,导致服务器在创建和销毁线程上花费的时间和消耗的系统资源要比花在处理实际的用户请求的时间和资源更多。线程池就是为了尽量减少这种情况的发生。
 
  下面我们来看看怎么用Java实现一个线程池。一个比较简单的线程池至少应包含线程池治理器、工作线程、任务队列、任务接口等部分。其中线程池治理器(ThreadPool Manager)的作用是创建、销毁并治理线程池,将工作线程放入线程池中;工作线程是一个可以循环执行任务的线程,在没有任务时进行等待;任务队列的作用是提供一种缓冲机制,将没有处理的任务放在任务队列中;任务接口是每个任务必须实现的接口,主要用来规定任务的入口、任务执行完后的收尾工作、任务的执行状态等,工作线程通过该接口调度任务的执行。
 
  一种就是以固定线程数目作为基准,让每一个线程的工作线程都处于无限循环中,利用Java中基类的nodify()与wait()进行协同工作。

  基本思想如下:

  在构建线程池的时候创建所有工作线程,并且让所有工作线程开始运行。
  public ThreadPool(int nPoolSize) {
        if(nPoolSize<=0){
            nPoolSize=DEFAULT_POOL_SIZE;
        }
                m_ThreadList=new ArrayList();
        m_RunList=new LinkedList();
        for(int i=0;i<nPoolSize;i++){
            WorkerThread temp=new WorkerThread(i+1);
            m_ThreadList.add(temp);
            temp.start();
        }
  }



  在工作线程的run()方法中用wait()进行等待,当线程处于wait()状态基本不占用CPU,这样所有工作线程都处于挂起状态,等待任务来唤醒。

  实现如下:

  while (true) {
            synchronized (m_RunList) {
              while (m_RunList.isEmpty()) {//任务列表为空则进行等待,否则运行任务,并在本任务列表里面剔除任务
                try {
                  m_RunList.wait();

上一篇:JAVA实例:学会数字签名 人气:599
下一篇:细说Java之util类 人气:490
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐