| 
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 }
 |