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