01: package net.sourceforge.squirrel_sql.fw.util;
02:
03: /*
04: * Copyright (C) 2001 Johan Companger
05: * jcompagner@j-com.nl
06: *
07: * Modifications copyright (C) 2001 Colin Bell
08: * colbell@users.sourceforge.net
09: *
10: * This library is free software; you can redistribute it and/or
11: * modify it under the terms of the GNU Lesser General Public
12: * License as published by the Free Software Foundation; either
13: * version 2.1 of the License, or (at your option) any later version.
14: *
15: * This library is distributed in the hope that it will be useful,
16: * but WITHOUT ANY WARRANTY; without even the implied warranty of
17: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18: * Lesser General Public License for more details.
19: *
20: * You should have received a copy of the GNU Lesser General Public
21: * License along with this library; if not, write to the Free Software
22: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23: */
24:
25: /**
26: * This is the code called by a thread in the thead pool that
27: * handles the executing of tasks.
28: *
29: * @author <A HREF="mailto:colbell@users.sourceforge.net">Colin Bell</A>
30: * @author <A HREF="mailto:jcompagner@j-com.nl">Johan Companger</A>
31: */
32: class TaskExecuter implements Runnable {
33: private boolean _bStopThread = false;
34: // private boolean _bStopExecution = false;
35: private ITaskThreadPoolCallback _callback;
36:
37: TaskExecuter(ITaskThreadPoolCallback callback)
38: throws IllegalArgumentException {
39: super ();
40: if (callback == null) {
41: throw new IllegalArgumentException(
42: "Null IGUIExecutionControllerCallback passed");
43: }
44: _callback = callback;
45: }
46:
47: public void run() {
48: while (!_bStopThread) {
49: Runnable task = null;
50: synchronized (_callback) {
51: _callback.incrementFreeThreadCount();
52: while (!_bStopThread) {
53: // _bStopExecution = false;
54: task = _callback.nextTask();
55: if (task != null) {
56: _callback.decrementFreeThreadCount();
57: break;
58: } else {
59: try {
60: _callback.wait();
61: } catch (InterruptedException ignore) {
62: // Ignore
63: }
64: }
65: }
66: }
67: if (task != null) {
68: try {
69: task.run();
70: } catch (Throwable th) {
71: _callback.showMessage(th);
72: }
73: }
74: }
75: }
76: }
|