packagecom.newTechnologyInJava5;importjava.util.ArrayList;importjava.util.List;importjava.util.Random;importjava.util.concurrent.Callable;importjava.util.concurrent.CancellationException;importjava.util.concurrent.CompletionService;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.ExecutorCompletionService;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.Future;importjava.util.concurrent.FutureTask;importjava.util.concurrent.TimeUnit;importjava.util.concurrent.TimeoutException;public classCallableAndFutureTask {/***@paramargs*/
public static class MyCallable implements Callable{privateString name;private intage;public MyCallable(String name, intage) {//TODO Auto-generated constructor stub
this.name =name;this.age =age;
}
@Overridepublic String call() throwsException {//TODO Auto-generated method stub
Thread.sleep(new Random().nextInt(4000));return "name:"+this.name+" "+"age:"+this.age;
}
}public static voidmain(String[] args) {//callable 执行任务,future得到任务执行结果
ExecutorService threadPool = Executors.newFixedThreadPool(3);
int i = 10;while(i-- > 0){Future future1 = threadPool.submit(new MyCallable("tom", 20));
Future future2 = threadPool.submit(new MyCallable("john", 30));
Future future3 = threadPool.submit(new MyCallable("jack", 40));try{try{
result.add(future1.get(3000, TimeUnit.MILLISECONDS));
}catch(TimeoutException e) {//TODO Auto-generated catch block
future1.cancel(true);
}try{
result.add(future2.get(3000, TimeUnit.MILLISECONDS));
}catch(TimeoutException e) {//TODO Auto-generated catch block
future2.cancel(true);
}try{
result.add(future3.get(3000, TimeUnit.MILLISECONDS));
}catch(TimeoutException e) {//TODO Auto-generated catch block
future3.cancel(true);
}
}catch(InterruptedException e) {//TODO Auto-generated catch block
e.printStackTrace();
}catch(ExecutionException e) {//TODO Auto-generated catch block
e.printStackTrace();
}if(result.size() == 0){
System.out.println("get no data");
}else{
System.out.println(result);
}
}
}
}