1 22 23 package org.jboss.aspects.asynchronous.concurrent; 24 25 import EDU.oswego.cs.dl.util.concurrent.Callable; 26 import EDU.oswego.cs.dl.util.concurrent.FutureResult; 27 import EDU.oswego.cs.dl.util.concurrent.ThreadFactoryUser; 28 import org.jboss.aspects.asynchronous.ProcessingTime; 29 30 31 35 36 public class TimedCallableImpl extends ThreadFactoryUser implements Callable, ProcessingTime 37 { 38 39 private final AdapterTask function; 40 41 private final long millis; 42 43 private long endingTime = -1; 44 45 private long startingTime = -1; 46 47 48 public TimedCallableImpl(AdapterTask function, long millis) 49 { 50 51 this.function = function; 52 53 this.millis = millis; 54 55 } 56 57 public Object call() throws Exception 58 { 59 60 FutureResult result = new FutureResult(); 61 62 63 Thread thread = getThreadFactory().newThread(result.setter(function)); 64 65 thread.start(); 66 67 try 68 { 69 70 startingTime = System.currentTimeMillis(); 71 72 Object obj = result.timedGet(millis); 73 74 endingTime = System.currentTimeMillis(); 75 76 return obj; 77 78 } 79 catch (InterruptedException ex) 80 { 81 82 endingTime = System.currentTimeMillis(); 83 84 function.cleanup(); 85 86 thread.interrupt(); 87 88 throw ex; 89 90 } 91 92 } 93 94 95 public long getEndingTime() 96 { 97 98 return endingTime; 99 100 } 101 102 public long getStartingTime() 103 { 104 105 return startingTime; 106 107 } 108 109 } 110 111 | Popular Tags |