Mercurial > hg > blitz_condensed
comparison src/EDU/oswego/cs/dl/util/concurrent/TimedCallable.java @ 0:3dc0c5604566
Initial checkin of blitz 2.0 fcs - no installer yet.
author | Dan Creswell <dan.creswell@gmail.com> |
---|---|
date | Sat, 21 Mar 2009 11:00:06 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:3dc0c5604566 |
---|---|
1 /* | |
2 TimedCallable.java | |
3 | |
4 Originally written by Joseph Bowbeer and released into the public domain. | |
5 This may be used for any purposes whatsoever without acknowledgment. | |
6 | |
7 Originally part of jozart.swingutils. | |
8 Adapted by Doug Lea for util.concurrent. | |
9 | |
10 History: | |
11 Date Who What | |
12 11dec1999 dl Adapted for util.concurrent | |
13 | |
14 */ | |
15 | |
16 package EDU.oswego.cs.dl.util.concurrent; | |
17 | |
18 /** | |
19 * TimedCallable runs a Callable function for a given length of time. | |
20 * The function is run in its own thread. If the function completes | |
21 * in time, its result is returned; otherwise the thread is interrupted | |
22 * and an InterruptedException is thrown. | |
23 * <p> | |
24 * Note: TimedCallable will always return within the given time limit | |
25 * (modulo timer inaccuracies), but whether or not the worker thread | |
26 * stops in a timely fashion depends on the interrupt handling in the | |
27 * Callable function's implementation. | |
28 * | |
29 * @author Joseph Bowbeer | |
30 * @version 1.0 | |
31 * | |
32 * <p>[<a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html"> Introduction to this package. </a>] | |
33 | |
34 */ | |
35 | |
36 public class TimedCallable extends ThreadFactoryUser implements Callable { | |
37 | |
38 private final Callable function; | |
39 private final long millis; | |
40 | |
41 public TimedCallable(Callable function, long millis) { | |
42 this.function = function; | |
43 this.millis = millis; | |
44 } | |
45 | |
46 public Object call() throws Exception { | |
47 | |
48 FutureResult result = new FutureResult(); | |
49 | |
50 Thread thread = getThreadFactory().newThread(result.setter(function)); | |
51 | |
52 thread.start(); | |
53 | |
54 try { | |
55 return result.timedGet(millis); | |
56 } | |
57 catch (InterruptedException ex) { | |
58 /* Stop thread if we were interrupted or timed-out | |
59 while waiting for the result. */ | |
60 thread.interrupt(); | |
61 throw ex; | |
62 } | |
63 } | |
64 } |