Java中线程池简单构建

原创 2004年01月07日 18:12:00
Java中线程池简单构建
                                                杨恒贤(yang_hx@neusoft.com)
 
现在服务器端的应用程序几乎都采用了“线程池”技术,这主要是为了提高系统效率。因为如果服务器对应每一个请求就创建一个线程的话,在很短的一段时间内就会产生很多创建和销毁线程动作,导致服务器在创建和销毁线程上花费的时间和消耗的系统资源要比花在处理实际的用户请求的时间和资源更多。线程池就是为了尽量减少这种情况的发生。
 
下面我们来看看怎么用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) {
}
          }
以上代码就是一个工作线程主要代码。这个线程永远不会停止,只可能被挂起,或者运行任务。
 
明天介绍另一种线程池的实现方法。

 

http://www.wds.gov.cn/UpImage/200417737.rar

线程池原理(讲的非常棒)

Java并发编程:线程池的使用   在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:   如果并发的线程数量很多,并且每个线程都是执行一个时间...
  • gol_phing
  • gol_phing
  • 2015年10月10日 23:01
  • 7191

java线程池学习(二) —— 实现一个简单的线程池

在上一篇文章中《java线程池学习(一) —— BlockingQueue》,我们简单探讨了一个BlockingQueue的概念。 那么在这边文章,我们要利用BlockingQueue来自己实现一个简...
  • Great_Smile
  • Great_Smile
  • 2015年10月03日 17:01
  • 2706

线程池;java实现线程池原理;适用于交互频繁的(如电商网站)

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托...
  • u010026901
  • u010026901
  • 2014年05月09日 11:01
  • 1540

JDK1.5中线程池的简单使用(java.util.concurrent.ThreadPoolExecut )

      在多线程大师Doug Lea的贡献下,在JDK1.5中加入了许多对并发特性的支持,例如:线程池。这里介绍的就是1.5种的线程池的简单使用方法。创建日期:2005-05-11最后修改日期:2...
  • dream19861009
  • dream19861009
  • 2011年05月10日 09:54
  • 1067

Java编程中线程池的最大风险规避

  • 2011年11月06日 10:20
  • 116KB
  • 下载

多线程中线程池的简单实现

线程池的简单实现
  • UUIDAndUID
  • UUIDAndUID
  • 2017年04月04日 03:40
  • 220

Java中线程池创建与使用

线程池是Java5以后添加的内容,
  • xuhu_it
  • xuhu_it
  • 2014年05月03日 23:27
  • 575

Java(Android)中线程池的使用

http://landerlyoung.github.io/blog/2014/09/23/javazhong-xian-cheng-chi-de-shi-yong/ java SE5提供了...
  • zhangxu0922
  • zhangxu0922
  • 2016年06月23日 11:58
  • 166

java中线程池的原理以及使用

http://uule.iteye.com/blog/1123185 一:线程池的介绍:    1.在什么情况下使用线程池?      1).单个任务处理的时间比较短      2).将需...
  • happyAliceYu
  • happyAliceYu
  • 2016年10月14日 22:35
  • 368

Java中线程池的学习

Java语言中线程池的概念是在Java5线程新特征中扩展的,可以帮助编写高效稳定可靠的多线程程序。线程池的基本思想是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度...
  • aqiao58
  • aqiao58
  • 2013年09月26日 18:27
  • 1519
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中线程池简单构建
举报原因:
原因补充:

(最多只允许输入30个字)