1
2
3
4
5
6
7
8
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
20
21
22
23
24 public class WaitPolicy implements RejectedExecutionHandler
25 {
26 private final long time;
27 private final TimeUnit timeUnit;
28
29
30
31
32 public WaitPolicy()
33 {
34
35 this(Long.MAX_VALUE, TimeUnit.SECONDS);
36 }
37
38
39
40
41
42 public WaitPolicy(long time, TimeUnit timeUnit)
43 {
44 super();
45 this.time = (time < 0 ? Long.MAX_VALUE : time);
46 this.timeUnit = timeUnit;
47 }
48
49 public void rejectedExecution(Runnable r, ThreadPoolExecutor e)
50 {
51 try
52 {
53 if (e.isShutdown() || !e.getQueue().offer(r, time, timeUnit))
54 {
55
56 throw new RejectedExecutionException();
57 }
58 }
59 catch (InterruptedException ie)
60 {
61 Thread.currentThread().interrupt();
62 throw new RejectedExecutionException(ie);
63 }
64 }
65
66 }