KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > protomatter > util > WorkQueueThread


1 package com.protomatter.util;
2
3 /**
4  * {{{ The Protomatter Software License, Version 1.0
5  * derived from The Apache Software License, Version 1.1
6  *
7  * Copyright (c) 1998-2002 Nate Sammons. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution,
22  * if any, must include the following acknowledgment:
23  * "This product includes software developed for the
24  * Protomatter Software Project
25  * (http://protomatter.sourceforge.net/)."
26  * Alternately, this acknowledgment may appear in the software itself,
27  * if and wherever such third-party acknowledgments normally appear.
28  *
29  * 4. The names "Protomatter" and "Protomatter Software Project" must
30  * not be used to endorse or promote products derived from this
31  * software without prior written permission. For written
32  * permission, please contact support@protomatter.com.
33  *
34  * 5. Products derived from this software may not be called "Protomatter",
35  * nor may "Protomatter" appear in their name, without prior written
36  * permission of the Protomatter Software Project
37  * (support@protomatter.com).
38  *
39  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
40  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
41  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
42  * DISCLAIMED. IN NO EVENT SHALL THE PROTOMATTER SOFTWARE PROJECT OR
43  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
46  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
47  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
48  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
49  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50  * SUCH DAMAGE. }}}
51  */

52
53 import com.protomatter.syslog.Syslog;
54
55 /**
56  * A worker thread for the <tt>WorkQueue</tt> object.
57  * Threads of this type are started by the WorkQueue to
58  * process elements of work that it's been asked to do.
59  *
60  * @see WorkQueue
61  */

62 class WorkQueueThread
63 extends Thread JavaDoc
64 {
65   private WorkQueue queue = null;
66   private int id = 0;
67
68   /**
69    * Create a WorkQueueHandlerThread that gets work from
70    * the given WorkQueueObjectPool (an ObjectPool implementation
71    * that holds elements of work).
72    */

73   public WorkQueueThread(WorkQueue queue, ThreadGroup JavaDoc group, int qId, String JavaDoc name, int id)
74   {
75     super(group, "WorkQueueThread[q="+qId+", qName="+name+", id="+id+"]");
76     this.queue = queue;
77     this.id = id;
78     this.setDaemon(true);
79   }
80
81   /**
82    * While there's work to do, do it, otherwise we're told to wait
83    * by the ObjectPool.
84    */

85   public void run()
86   {
87     WorkQueue q = queue; // local refs are a little faster
88
int i=0;
89     while (true)
90     {
91       try
92       {
93         // this will block until there's something to do.
94
Runnable JavaDoc r = q.getWork();
95         if (r != null)
96         {
97           r.run();
98         }
99         else
100         {
101           // if there's nothing to do, yield
102
Thread.yield();
103         }
104       }
105       catch (Throwable JavaDoc t)
106       {
107         // should probably log this?
108
Syslog.log(this, t);
109       }
110     }
111   }
112 }
113
Popular Tags