| /* |
| |
| 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; |
| } |
| |
| |
| }; |