blob: 4a9849ba30625469ffafb14c1d9e83c599e10f4c [file] [log] [blame]
/*
Copyright 2004 The Apache Software Foundation
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.
*/
package org.apache.batik.util;
/**
* This is a subclass of java.lang.Thread that includes a non-intrusive
* 'halt' method. The Halt method simply sets a boolean that can be
* checked periodically during expensive processing.
*
* @author <a href="mailto:deweese@apache.org">deweese</a>
* @version $Id$
*/
public class HaltingThread extends Thread {
/**
* Boolean indicating if this thread has ever been 'halted'.
*/
protected boolean beenHalted = false;
public HaltingThread() { }
public HaltingThread(Runnable r) { super(r); }
public HaltingThread(String name) { super(name); }
public HaltingThread(Runnable r, String name) { super(r, name); }
/**
* returns true if someone has halted the thread.
*/
public boolean isHalted() {
synchronized (this) { return beenHalted; }
}
/**
* Set's beenHalted to true.
*/
public void halt() {
synchronized (this) { beenHalted = true; }
}
/**
* Set's beenHalted to false.
*/
public void clearHalted() {
synchronized (this) { beenHalted = false; }
}
/**
* Calls 'halt' on <tt>Thread.currentThread()</tt> if it is an
* instance of HaltingThread otherwise it does nothing.
*/
public static void haltThread() {
haltThread(Thread.currentThread());
}
/**
* Calls 'halt' on <tt>t</tt> if it is an instance of
* HaltingThread otherwise it does nothing.
*/
public static void haltThread(Thread t) {
if (t instanceof HaltingThread)
((HaltingThread)t).halt();
}
/**
* Returns the result of calling hasBeenHalted on
* <tt>Thread.currentThread()</tt>, if it is an instance of
* HaltingThread otherwise it returns false.
*/
public static boolean hasBeenHalted() {
return hasBeenHalted(Thread.currentThread());
}
/**
* Returns the result of calling hasBeenHalted on <tt>t</tt>,
* if it is an instance of HaltingThread otherwise it returns false.
*/
public static boolean hasBeenHalted(Thread t) {
if (t instanceof HaltingThread)
return ((HaltingThread)t).isHalted();
return false;
}
};