001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the "License"); 007 * you may not use this file except in compliance with the License. 008 * You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 /* 019 * $Id: ThreadControllerWrapper.java 468655 2006-10-28 07:12:06Z minchau $ 020 */ 021 package org.apache.xml.utils; 022 023 /** 024 * A utility class that wraps the ThreadController, which is used 025 * by IncrementalSAXSource for the incremental building of DTM. 026 */ 027 public class ThreadControllerWrapper 028 { 029 030 /** The ThreadController pool */ 031 private static ThreadController m_tpool = new ThreadController(); 032 033 public static Thread runThread(Runnable runnable, int priority) 034 { 035 return m_tpool.run(runnable, priority); 036 } 037 038 public static void waitThread(Thread worker, Runnable task) 039 throws InterruptedException 040 { 041 m_tpool.waitThread(worker, task); 042 } 043 044 /** 045 * Thread controller utility class for incremental SAX source. Must 046 * be overriden with a derived class to support thread pooling. 047 * 048 * All thread-related stuff is in this class. 049 */ 050 public static class ThreadController 051 { 052 053 /** 054 * Will get a thread from the pool, execute the task 055 * and return the thread to the pool. 056 * 057 * The return value is used only to wait for completion 058 * 059 * 060 * NEEDSDOC @param task 061 * @param priority if >0 the task will run with the given priority 062 * ( doesn't seem to be used in xalan, since it's allways the default ) 063 * @return The thread that is running the task, can be used 064 * to wait for completion 065 */ 066 public Thread run(Runnable task, int priority) 067 { 068 069 Thread t = new Thread(task); 070 071 t.start(); 072 073 // if( priority > 0 ) 074 // t.setPriority( priority ); 075 return t; 076 } 077 078 /** 079 * Wait until the task is completed on the worker 080 * thread. 081 * 082 * NEEDSDOC @param worker 083 * NEEDSDOC @param task 084 * 085 * @throws InterruptedException 086 */ 087 public void waitThread(Thread worker, Runnable task) 088 throws InterruptedException 089 { 090 091 // This should wait until the transformThread is considered not alive. 092 worker.join(); 093 } 094 } 095 096 }