1. Опишите и повествование
При программировании при многопользовательстве. Вы можете столкнуться с необходимостью, то есть, когда потоки, которые я открываю, я хочу получить данные, возвращаемые в каждом потоке одновременно, а затем выполнить унифицированную обработку. В соответствии с этим требованием сочетание будущего и вызывшего в них отличное использование.
Некоторые люди могут также сказать, что я могу использовать синхронизацию для выполнения этого требования, но это действительно возможно в обычных случаях. Но в особом случае это не сработает:
Представьте, что вы включили несколько потоков для синхронного расчета некоторых данных, но все знают, что потоки будут конкурировать за ресурсы, то есть. Когда вы включите несколько потоков для синхронизации расчета данных. На самом деле, порядок расчета между потоками не может быть нулевым, конечно, невозможно справиться с ним, если вы не совершите большую ошибку. В таком случае. Сочетание будущего и вызывания является лучшим выбором.
2. Примеры примеров
Примеры этих двух категорий на самом деле очень просты, в основном в зависимости от того, можете ли вы найти их использование в реальном использовании. На коде:
Пакет -тест; Импорт java.util.concurrent.callable; import java.util.concurrent.executionexception; import java.util.concurrent.executorservice; импорт java.util.concurrent.executors; import java.util.concurrent.future; Public Class featureCallableTest {Private Static ExecutorService Service = experators.newfixedThreadpool (100); частный статический счет int = 1; public static void main (string [] args) бросает прерывание, выполнение, executionException {int sum = 0; for (int i = 0; i <100; i ++) {future <Integer> future = service.submit (new Callable <Integer> () {@override public integer call () Throws Exception {System.out.println (Thread.currentThread (). getName ()); return ++ count;}}); int f = future.get (); sum += f; System.out.println («будущее есть» + f); } System.out.println ("sum is" + sum); service.shutdownnow (); }}