1. Descreva e narrativa
Ao programar em multithreading. Você pode encontrar uma necessidade, ou seja, quando os threads abro a extremidade, quero obter os dados retornados em cada thread ao mesmo tempo e depois executar o processamento unificado. Sob esse requisito, a combinação de futuro e chamada é de grande utilidade.
Algumas pessoas também podem dizer que eu posso usar a sincronização para concluir esse requisito, mas é realmente possível em casos comuns. Mas em um caso especial, não funcionará:
Imagine que você ativou vários threads para calcular alguns dados de síncrona, mas todo mundo sabe que os threads competirão por recursos, ou seja. Quando você habilita vários threads para sincronizar o cálculo dos dados. De fato, a ordem de cálculo entre os threads não pode ser nula, é claro, não é impossível lidar com isso, a menos que você não coma um grande erro. Nesse caso. A combinação de futuro e chamada é a melhor escolha.
2. Exemplos de amostra
Os exemplos dessas duas categorias são realmente muito fáceis, principalmente dependendo se você pode encontrar o uso deles no uso real. No código:
teste de pacote; importar java.util.Concurrent.Callable; importar java.util.concurrent.executionException; importar java.util.concurrent.executorService; importar java.util.concurrent.executores; importar java.util.concurrent.future; classe pública FeatureCallableTest {private Static ExecorService Service = Executores.NewfixedThreadpool (100); private estático int contagem = 1; public static void main (string [] args) lança interruptedException, executionException {int sum = 0; para (int i = 0; i <100; i ++) {futuro <Teger> future = service.subMit (novo callable <Teger> () {@Override public Integer Call () lança exceção {System.out.println (Thread.CurrentThread (). int f = futuro.get (); soma += f; System.out.println ("futuro é" + f); } System.out.println ("soma é" + soma); Service.shutdownNow (); }}