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

📄 controlledthread.java

📁 spam source codejasen-0.9jASEN - java Anti Spam ENgine.zip 如标题所示
💻 JAVA
字号:
/*
 * @(#)ControlledThread.java	8/01/2005
 *
 * Copyright (c) 2004, 2005  jASEN.org
 * 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.
 *
 *   3. The names of the authors may not be used to endorse or promote products
 *      derived from this software without specific prior written permission.
 *
 *   4. Any modification or additions to the software must be contributed back
 *      to the project.
 *
 *   5. Any investigation or reverse engineering of source code or binary to
 *      enable emails to bypass the filters, and hence inflict spam and or viruses
 *      onto users who use or do not use jASEN could subject the perpetrator to
 *      criminal and or civil liability.
 *
 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED 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 JASEN.ORG,
 * OR ANY CONTRIBUTORS TO THIS SOFTWARE 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.jasen.thread;

import org.apache.log4j.Logger;
import org.jasen.error.JasenException;

/**
 * <p>
 * A simple thread implementation which provides the capability to be stopped.
 * </p>
 * @author Jason Polites
 */
public abstract class ControlledThread extends StoppableThread {

    Logger logger = Logger.getLogger(ControlledThread.class);
    
    protected boolean running = false;
    boolean processOnStart = false;
    
    long sleepTime = 0L; // forever

    /**
     * 
     */
    public ControlledThread() {
        super();
    }

    /**
     * @param target
     */
    public ControlledThread(Runnable target) {
        super(target);
    }

    /**
     * @param name
     */
    public ControlledThread(String name) {
        super(name);
    }

    /**
     * @param group
     * @param target
     */
    public ControlledThread(ThreadGroup group, Runnable target) {
        super(group, target);
    }

    /**
     * @param target
     * @param name
     */
    public ControlledThread(Runnable target, String name) {
        super(target, name);
    }

    /**
     * @param group
     * @param name
     */
    public ControlledThread(ThreadGroup group, String name) {
        super(group, name);
    }

    /**
     * @param group
     * @param target
     * @param name
     */
    public ControlledThread(ThreadGroup group, Runnable target, String name) {
        super(group, target, name);
    }

    /**
     * @param group
     * @param target
     * @param name
     * @param stackSize
     */
    public ControlledThread(ThreadGroup group, Runnable target, String name,
            long stackSize) {
        super(group, target, name, stackSize);
    }
    
    /*
     * (non-Javadoc)
     * @see java.lang.Runnable#run()
     */
    public void run() {
        
        logger.debug(this.getClass().getName() + " starting");
        
        running = true;
        boolean firstRun = true;
        
        while(running) {
            if(processOnStart && firstRun || !firstRun) {
                try {
                    logger.debug(this.getClass().getName() + " processing");
                    process();
                } catch (JasenException e) {
                    handleException(e);
                }
            }  

            firstRun = false;
            
            synchronized (this) {
                if(running) {
                    try {
                        wait(sleepTime);
                    } catch (InterruptedException ignore) {}                    
                }
            }
        }
        
        logger.debug(this.getClass().getName() + " stopped");
    }
    
    /**
     * Wakes up the sleeping thread
     *
     */
    public synchronized void wake() {
        notify();
    }
    
    /**
     * Stops the thread.
     *<br/>
     * The thread will only stop AFTER the current processing cycle has completed
     */
    public synchronized void finish() {
        logger.debug(this.getClass().getName() + " stopping...");
        running = false;
        notifyAll();
    }
    
    
    /**
     * Indicates whether the thread will process on startup.
     * @return True if the thread processes on startup, false otherwise.
     */
    public boolean isProcessOnStart() {
        return processOnStart;
    }
    
    /**
     * Flags the thread to execute a process on startup.
     * @param processOnStart True if the thread should process on startup.  If false, the thread automatically enters a wait state
     */
    public void setProcessOnStart(boolean processOnStart) {
        this.processOnStart = processOnStart;
    }
    
    /**
     * Gets the sleep time for the thread.  This is the time between run cycles.
     * @return The sleep time in milliseconds
     */
    public long getSleepTime() {
        return sleepTime;
    }
    
    /**
     * Sets the sleep time for the thread.  This is the time between run cycles.
     * <br/>
     * Default is wait forever (0)
     * @param sleepTime
     */
    public void setSleepTime(long sleepTime) {
        this.sleepTime = sleepTime;
    }
    
    /**
     * Returns true if the thread is currently running.
     * @return
     */
    public boolean isRunning() {
        return running;
    }
    
    /**
     * Performs the primary thread processing.
     *
     */
    public abstract void process() throws JasenException;
    
    /**
     * Handles unrecoverable errors.
     * @param e
     */
    public abstract void handleException(Exception e);
    

}

⌨️ 快捷键说明

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