threadpool.java

来自「JGRoups源码」· Java 代码 · 共 102 行

JAVA
102
字号
// $Id: ThreadPool.java,v 1.9 2005/07/17 11:33:58 chrislott Exp $package org.jgroups.util;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;/** * Maintains a set of ReusableThreads. When a thread is to be returned, all existing threads * are checked: when one is available, it will be returned. Otherwise, a new thread is created * and returned, unless the pool limit is reached, in which case <code>null</code> is returned. * Creates threads only as needed, up to the MAX_NUM limit. However, does not shrink the pool * when more threads become available than are used. * @todo Shrink thread pool if threads are unused after some configurable time. * @author Bela Ban */public class ThreadPool {    int              MAX_NUM=255;    int              current_index=0;   /// next available thread    ReusableThread[] pool=null;    boolean[]        available_threads=null;    protected static final Log log=LogFactory.getLog(ThreadPool.class);    public ThreadPool(int max_num) {        MAX_NUM=max_num;        pool=new ReusableThread[MAX_NUM];        available_threads=new boolean[MAX_NUM];        for(int i=0; i < pool.length; i++) {            pool[i]=null;            available_threads[i]=true;        }        if(log.isDebugEnabled()) log.debug("created a pool of " + MAX_NUM + " threads");    }    public ReusableThread getThread() {        ReusableThread retval=null, tmp;        synchronized(pool) {            // check whether a previously created thread can be reused            for(int i=0; i < current_index; i++) {                tmp=pool[i];                if(tmp.available()) {                    return tmp;                }            }            // else create a new thread and add it to the pool            if(current_index >= MAX_NUM) {                if(log.isErrorEnabled()) log.error("could not create new thread because " +                        "pool's max size reached (" + MAX_NUM + ") !");                return null;            }            else {                retval=new ReusableThread();                pool[current_index++]=retval;                return retval;            }        }    }    public void destroy() {        deletePool();    }    public String toString() {        StringBuffer ret=new StringBuffer();        synchronized(pool) {            ret.append("ThreadPool: capacity=" + pool.length + ", index=" + current_index + '\n');            ret.append("Threads are:\n");            for(int i=0; i < current_index; i++)                ret.append("[" + i + ": " + pool[i] + "]\n");        }        return ret.toString();    }    void deletePool() {        ReusableThread t;        synchronized(pool) {            for(int i=0; i < MAX_NUM; i++) {                t=pool[i];                if(t != null) {                    t.stop();                    pool[i]=null;                }            }            current_index=0;        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?