网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  java学习:线程池的简单构建     
  文章作者:未知  文章来源:水木森林  
  查看:53次  录入:管理员--2007-11-16  
    现在服务器端的应用程序几乎都采用了“线程池”技术,这主要是为了提高系统效率。因为如果服务器对应每一个请求就创建一个线程的话,在很短的一段时间内就会产生很多创建和销毁线程动作,导致服务器在创建和销毁线程上花费的时间和消耗的系统资源要比花在处理实际的用户请求的时间和资源更多。线程池就是为了尽量减少这种情况的发生。
 
  下面我们来看看怎么用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();
                }
                catch (interruptedexception e) {
                }
              }
              r = (runnable) m_runlist.removefirst();
              //system.out.println(m_nthreadid + ":start");
              if (r == null)return;
            }
   
            try {
              r.run();
            }
            catch (exception e) {
  }
          }

以上代码就是一个工作线程主要代码。这个线程永远不会停止,只可能被挂起,或者运行任务。
 
 
上一篇: 如何编写一个java的队列类?    下一篇: 细说java之util类
  相关文档
死锁 11-17
开发j2ee应用应遵循的几点原则 11-16
pda操作系统大比拼之二 11-17
j2se api读取properties文件的六种方法 11-16
对两代不同的corba对象生命周期的慨述 11-16
实现阴影、镂空、离散等特种文字效果 11-17
关于jcreator pro 3.0的一个折中处理方案(序列号和汉字)(转) 11-17
简单的字符转换和反转换函数 11-17
使用hibernate实现树形结构无限级分类 11-17
手把手教您jbuliderx+tomcat5.0的配置 11-17
给经理们的.net讲座 11-17
用java绘制k线 11-17
j2me开发心得-数组的使用 11-17
基础--认识了解ddos攻击以及防范措施 12-24
使用技巧:通过java.net包建立双向通讯 11-16
多附件、带有预览功能的html页面 11-17
用java转化汉字为拼音全拼 11-17
struts 中bean:present使用方法 11-17
企业级应用中开发 j2ee 应用的黄金要领 11-17
java数据对象技术jdo(1) 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息