⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simplethreadpool.java

📁 Quartz is a full-featured, open source job scheduling system that can be integrated with, or used al
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*  * Copyright 2004-2005 OpenSymphony  *  * Licensed under the Apache License, Version 2.0 (the "License"); you may not  * use this file except in compliance with the License. You may obtain a copy  * of the License at  *  *   http://www.apache.org/licenses/LICENSE-2.0  *    * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the  * License for the specific language governing permissions and limitations  * under the License. *  *//* * Previously Copyright (c) 2001-2004 James House */package org.quartz.simpl;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.quartz.SchedulerConfigException;import org.quartz.spi.ThreadPool;import java.util.Iterator;import java.util.LinkedList;import java.util.List;/** * <p> * This is class is a simple implementation of a thread pool, based on the * <code>{@link org.quartz.spi.ThreadPool}</code> interface. * </p> *  * <p> * <CODE>Runnable</CODE> objects are sent to the pool with the <code>{@link #runInThread(Runnable)}</code> * method, which blocks until a <code>Thread</code> becomes available. * </p> *  * <p> * The pool has a fixed number of <code>Thread</code>s, and does not grow or * shrink based on demand. * </p> *  * @author James House * @author Juergen Donnerstag */public class SimpleThreadPool implements ThreadPool {    /*     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     *      * Data members.     *      * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     */    private int count = -1;    private int prio = Thread.NORM_PRIORITY;    private boolean isShutdown = false;    private boolean handoffPending = false;    private boolean inheritLoader = false;    private boolean inheritGroup = true;    private boolean makeThreadsDaemons = false;    private ThreadGroup threadGroup;    private final Object nextRunnableLock = new Object();    private List workers;    private LinkedList availWorkers = new LinkedList();    private LinkedList busyWorkers = new LinkedList();    private String threadNamePrefix = "SimpleThreadPoolWorker";    private final Log log = LogFactory.getLog(getClass());    /*     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     *      * Constructors.     *      * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     */    /**     * <p>     * Create a new (unconfigured) <code>SimpleThreadPool</code>.     * </p>     *      * @see #setThreadCount(int)     * @see #setThreadPriority(int)     */    public SimpleThreadPool() {    }    /**     * <p>     * Create a new <code>SimpleThreadPool</code> with the specified number     * of <code>Thread</code> s that have the given priority.     * </p>     *      * @param threadCount     *          the number of worker <code>Threads</code> in the pool, must     *          be > 0.     * @param threadPriority     *          the thread priority for the worker threads.     *      * @see java.lang.Thread     */    public SimpleThreadPool(int threadCount, int threadPriority) {        setThreadCount(threadCount);        setThreadPriority(threadPriority);    }    /*     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     *      * Interface.     *      * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     */    public Log getLog() {        return log;    }    public int getPoolSize() {        return getThreadCount();    }    /**     * <p>     * Set the number of worker threads in the pool - has no effect after     * <code>initialize()</code> has been called.     * </p>     */    public void setThreadCount(int count) {        this.count = count;    }    /**     * <p>     * Get the number of worker threads in the pool.     * </p>     */    public int getThreadCount() {        return count;    }    /**     * <p>     * Set the thread priority of worker threads in the pool - has no effect     * after <code>initialize()</code> has been called.     * </p>     */    public void setThreadPriority(int prio) {        this.prio = prio;    }    /**     * <p>     * Get the thread priority of worker threads in the pool.     * </p>     */    public int getThreadPriority() {        return prio;    }    public void setThreadNamePrefix(String prfx) {        this.threadNamePrefix = prfx;    }    public String getThreadNamePrefix() {        return threadNamePrefix;    }    /**     * @return Returns the     *         threadsInheritContextClassLoaderOfInitializingThread.     */    public boolean isThreadsInheritContextClassLoaderOfInitializingThread() {        return inheritLoader;    }    /**     * @param inheritLoader     *          The threadsInheritContextClassLoaderOfInitializingThread to     *          set.     */    public void setThreadsInheritContextClassLoaderOfInitializingThread(            boolean inheritLoader) {        this.inheritLoader = inheritLoader;    }    public boolean isThreadsInheritGroupOfInitializingThread() {        return inheritGroup;    }    public void setThreadsInheritGroupOfInitializingThread(            boolean inheritGroup) {        this.inheritGroup = inheritGroup;    }    /**     * @return Returns the value of makeThreadsDaemons.     */    public boolean isMakeThreadsDaemons() {        return makeThreadsDaemons;    }    /**     * @param makeThreadsDaemons     *          The value of makeThreadsDaemons to set.     */    public void setMakeThreadsDaemons(boolean makeThreadsDaemons) {        this.makeThreadsDaemons = makeThreadsDaemons;    }    public void initialize() throws SchedulerConfigException {        if (count <= 0) {            throw new SchedulerConfigException(                    "Thread count must be > 0");        }        if (prio <= 0 || prio > 9) {            throw new SchedulerConfigException(                    "Thread priority must be > 0 and <= 9");        }        if(isThreadsInheritGroupOfInitializingThread()) {            threadGroup = Thread.currentThread().getThreadGroup();        } else {            // follow the threadGroup tree to the root thread group.            threadGroup = Thread.currentThread().getThreadGroup();            ThreadGroup parent = threadGroup;            while ( !parent.getName().equals("main") ) {                threadGroup = parent;                parent = threadGroup.getParent();            }            threadGroup = new ThreadGroup(parent, "SimpleThreadPool");            if (isMakeThreadsDaemons()) {                threadGroup.setDaemon(true);            }        }        if (isThreadsInheritContextClassLoaderOfInitializingThread()) {            getLog().info(                    "Job execution threads will use class loader of thread: "                            + Thread.currentThread().getName());        }        // create the worker threads and start them        Iterator workerThreads = createWorkerThreads(count).iterator();        while(workerThreads.hasNext()) {            WorkerThread wt = (WorkerThread) workerThreads.next();            wt.start();            availWorkers.add(wt);        }    }    protected List createWorkerThreads(int count) {        workers = new LinkedList();        for (int i = 1; i<= count; ++i) {            WorkerThread wt = new WorkerThread(this, threadGroup,                getThreadNamePrefix() + "-" + i,                getThreadPriority(),                isMakeThreadsDaemons());            if (isThreadsInheritContextClassLoaderOfInitializingThread()) {                wt.setContextClassLoader(Thread.currentThread()                        .getContextClassLoader());            }            workers.add(wt);        }        return workers;

⌨️ 快捷键说明

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