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

📄 simplethreadpool.java

📁 定时器开源项目, 相对于 jcrontab, Quartz 算是更完整的一个项目, 随著开发的版本上来, 他已经脱离只是写在程序里面的计时器, 在指定的时间或区间, 处理所指定的事件. 也加入了 se
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * Copyright James House (c) 2001-2004 *  * All rights reserved. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: 1. * Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. 2. Redistributions in * binary form must reproduce the above copyright notice, this list of * conditions and the following disclaimer in the documentation and/or other * materials provided with the distribution. *  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *   */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;/** * <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 inheritLoader = false;    private boolean inheritGroup = true;    private boolean makeThreadsDaemons = false;    private ThreadGroup threadGroup;    private Runnable nextRunnable;    private Object nextRunnableLock = new Object();    private WorkerThread[] workers;    private String threadNamePrefix = "SimpleThreadPoolWorker";        /*     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     *      * 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 and <= 200.     * @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 LogFactory.getLog(SimpleThreadPool.class);    }    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 || count > 200)                throw new SchedulerConfigException(                        "Thread count must be > 0 and <= 200");        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 (isThreadsInheritContextClassLoaderOfInitializingThread())                getLog().info(                        "Job execution threads will use class loader of thread: "                                + Thread.currentThread().getName());        // create the worker threads and start them        workers = new WorkerThread[count];        for (int i = 0; i < count; ++i) {            workers[i] = new WorkerThread(this, threadGroup,                 getThreadNamePrefix() + "-" + i, prio, isMakeThreadsDaemons());            if (isThreadsInheritContextClassLoaderOfInitializingThread()) {                workers[i].setContextClassLoader(Thread.currentThread()                        .getContextClassLoader());            }        }    }    /**     * <p>     * Terminate any worker threads in this thread group.     * </p>     *      * <p>

⌨️ 快捷键说明

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