É um objeto utilizado para verificar o resultado de um processamento assíncrono, ou seja, um processamento que será executado em uma thread separada da thread principal do programa. Como você não sabe quando esta outra thread irá terminar ou quanto tempo irá durar o processamento, o objeto Future permite que você consulte estas informações de tempos em tempos, que cancele a execução da tarefa ou espere ela executar até o final.
packageteste.concorrencia;importjava.util.Random;importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.Future;/** * Esta classe mostra o funcionamento dos objetos Future. Eles servem para receber o resultado de uma execução <br></br> * de alguma atividade que foi submetida para ser executada em alguma thread do pool. <br></br> * * * @author Rogério de Paula Aguilar (04/2012) * * */publicclassTesteFuture{finalExecutorServiceexec=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()+1);/* * Esta classe simula um processamento qualquer que pode durar até 10 segundos * */classTesteCallableimplementsCallable<Long>{privateintx;publicTesteCallable(intx){this.x=x;}publicLongcall()throwsException{Randomrnd=newRandom();longsleep=Math.abs(rnd.nextLong())%10_000;System.out.println("Thread "+x+" - sleeping "+sleep);try{Thread.sleep(sleep);}catch(InterruptedExceptione){// TODO Auto-generated catch blocke.printStackTrace();}returnsleep;}}/* * Neste teste são criadas 8 tarefas e seus respectivos objetos future. Além disso é criado um array contendo * o status de execução de cada tarefa. * As tarefas são então submetidas ao pool e é criado um looping na thread principal do programa que aguarda * a execução destas tarefas. * */publicvoidteste(){Futuref[]=newFuture[8];//array que guarda o status de 8 tarefasbooleantarefasCompletadas[]={false,false,false,false,false,false,false,false};intcontTarefas=0;for(intx=0;x<8;x++){f[x]=exec.submit(newTesteCallable(x));}do{for(intx=0;x<8;x++){if(f[x].isDone()&&!tarefasCompletadas[x]){try{System.out.println("&&&&&Completo -> "+f[x].get());}catch(InterruptedExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(ExecutionExceptione){// TODO Auto-generated catch blocke.printStackTrace();}tarefasCompletadas[x]=true;contTarefas++;System.out.println("*******CONT --> "+contTarefas);}try{try{Thread.sleep(10);}catch(InterruptedExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}finally{}}}while(contTarefas<7);System.out.println("OK");exec.shutdown();}publicstaticvoidmain(String[]args){newTesteFuture().teste();}}