KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mule > util > concurrent > WaitPolicy


1 /*
2  * $Id: WaitPolicy.java 3798 2006-11-04 04:07:14Z aperepel $
3  * --------------------------------------------------------------------------------------
4  * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com
5  *
6  * The software in this package is published under the terms of the MuleSource MPL
7  * license, a copy of which has been included with this distribution in the
8  * LICENSE.txt file.
9  */

10
11 package org.mule.util.concurrent;
12
13 import edu.emory.mathcs.backport.java.util.concurrent.RejectedExecutionException;
14 import edu.emory.mathcs.backport.java.util.concurrent.RejectedExecutionHandler;
15 import edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor;
16 import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
17
18 /**
19  * A handler for unexecutable tasks that waits until the task can be submitted for
20  * execution or times out. Generously snipped from the jsr166 repository at: <a
21  * HREF="http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/main/java/util/concurrent/ThreadPoolExecutor.java"></a>.
22  */

23 // @Immutable
24
public class WaitPolicy implements RejectedExecutionHandler
25 {
26     private final long _time;
27     private final TimeUnit _timeUnit;
28
29     /**
30      * Constructs a <tt>WaitPolicy</tt> which waits (almost) forever.
31      */

32     public WaitPolicy()
33     {
34         // effectively waits forever
35
this(Long.MAX_VALUE, TimeUnit.SECONDS);
36     }
37
38     /**
39      * Constructs a <tt>WaitPolicy</tt> with timeout. A negative <code>time</code>
40      * value is interpreted as <code>Long.MAX_VALUE</code>.
41      */

42     public WaitPolicy(long time, TimeUnit timeUnit)
43     {
44         super();
45         _time = (time < 0 ? Long.MAX_VALUE : time);
46         _timeUnit = timeUnit;
47     }
48
49     public void rejectedExecution(Runnable JavaDoc r, ThreadPoolExecutor e)
50     {
51         try
52         {
53             if (e.isShutdown() || !e.getQueue().offer(r, _time, _timeUnit))
54             {
55                 throw new RejectedExecutionException();
56             }
57         }
58         catch (InterruptedException JavaDoc ie)
59         {
60             Thread.currentThread().interrupt();
61             throw new RejectedExecutionException(ie);
62         }
63     }
64
65 }
66
Popular Tags