68
|
1 package fschmidt.util.java;
|
|
2
|
|
3 import java.util.concurrent.Callable;
|
|
4 import java.util.concurrent.ExecutionException;
|
|
5 import java.util.concurrent.Future;
|
|
6 import java.util.concurrent.FutureTask;
|
|
7 import java.util.concurrent.TimeUnit;
|
|
8
|
|
9
|
|
10 public final class FastFuture<V> implements Future<V> {
|
|
11 private volatile V result;
|
|
12 private volatile FutureTask<V> futureTask;
|
|
13
|
|
14 public FastFuture(Callable<V> callable) {
|
|
15 futureTask = new FutureTask<V>(callable);
|
|
16 }
|
|
17
|
|
18 public void run() {
|
|
19 FutureTask<V> ft = futureTask;
|
|
20 if( ft != null ) {
|
|
21 ft.run();
|
|
22 }
|
|
23 }
|
|
24
|
|
25 public boolean cancel(boolean mayInterruptIfRunning) {
|
|
26 throw new UnsupportedOperationException();
|
|
27 }
|
|
28
|
|
29 public boolean isCancelled() {
|
|
30 return false;
|
|
31 }
|
|
32
|
|
33 public boolean isDone() {
|
|
34 return futureTask == null;
|
|
35 }
|
|
36
|
|
37 public V get() throws InterruptedException, ExecutionException {
|
|
38 FutureTask<V> ft = futureTask;
|
|
39 if( ft != null ) {
|
|
40 result = ft.get();
|
|
41 futureTask = null;
|
|
42 }
|
|
43 return result;
|
|
44 }
|
|
45
|
|
46 public V get(long timeout,TimeUnit unit) {
|
|
47 throw new UnsupportedOperationException();
|
|
48 }
|
|
49
|
|
50 }
|