1. Conceito
Future representa o resultado de uma tarefa assíncrona que pode não ter sido concluída. O retorno de chamada pode ser adicionado a este resultado para executar as operações correspondentes após a execução da tarefa ser bem-sucedida ou falhar.
2. Interface futura
A interface Future define cinco métodos de interface principais RunnableFuture e ScheduleFuture herdam esta interface, e CompleteFuture e ForkJoinTask herdam esta interface.
3. Exemplos
teste de pacote; importar java.util.concurrent.Callable; importar java.util.concurrent.ExecutionException; importar java.util.concurrent.FutureTask; classe pública CallableFutureTest { public static void main(String[] args) { startTime longo = System.currentTimeMillis(); Callable<Integer> calculaCallable = new Callable<Integer>() { @Substituir chamada pública inteira() lança exceção { // TODO stub de método gerado automaticamente Thread.sleep(2000); //Simulação demorada int result = 1+2; resultado de retorno; } }; FutureTask<Integer> calcularFutureTask = new FutureTask<>(calcularCallable); Tópico t1 = novo Tópico(calcularFutureTask); t1.start(); //Agora junte-se ao Thread para executar um serviço demorado que simula chamadas remotas e depende de seus resultados de cálculo (como uma calculadora de rede) tentar { //Simule tarefas demoradas, o thread principal faz seu próprio trabalho, refletindo as vantagens do multi-threading Thread.sleep(3000); intuma = 3+5; Resultado inteiro = calcularFutureTask.get(); System.out.println("result = "+(a+result));//Simula o resultado da execução do thread principal dependendo do subthread long endTime = System.currentTimeMillis(); System.out.println("time = "+(endTime-startTime)+"ms"); } catch (InterruptedException | ExecutionException e) { // TODO Bloco catch gerado automaticamente e.printStackTrace(); } } }
Como você pode ver acima, o tempo gasto acima é de cerca de 3s. Na verdade, é principalmente o tempo gasto pelo thread principal sleep (3000). o tempo que podemos precisar pode ser 5s (subthread 2s + thread principal 3s).
O que foi dito acima é como Future obtém resultados de thread em Java. Pode-se dizer que Future é mais flexível no processamento de threads. O mecanismo é aproximadamente que quando um thread está em execução, outro thread é executado ao mesmo tempo. Se você estiver interessado, poderá aprender mais depois da aula.