введение
- Когда вы видите заголовок, там сразу несколько имен, очень вероятно, что вы все это знаете, слышали и видели, но действительно ли вы разобрались в их родстве?
- В этот момент потока знаний и беспокойства по поводу технологий все говорят о высоком уровне параллелизма, больших данных и распределении.
Runnable/Thread
- Обычно трудоемкие операции передаются для обработки нескольким потокам.В Java легко открыть новый поток, наследоваться от Thread или реализовать интерфейс Runnable. Ниже приведены общие операции.
- Включение многопоточности часто используется для использования многоядерных возможностей процессора. New Thread() или реализацию Runnable легко реализовать, так зачем вам Future и Callable? Это разработчики JDK слишком много думают?
- Обычно мы просто делаем одну операцию, запускаем поток и выбрасываем его, а что касается возвращаемого значения, то мы, кажется, никогда не заботимся об этом в нашей разработке. На самом деле, будь то new Thread() или реализация Runnable, результат выполнения нельзя получить после выполнения, не то чтобы мы не хотим его контролировать, но мы не можем его контролировать. Что касается успеха или неудачи выполнения потока, то он часто зависит от судьбы, потому что в большинстве случаев мы по умолчанию считаем эту операцию выполнения успешной. Если есть проблема, вы можете только следить за журналом.
- Результат выполнения можно получить косвенно через разделяемые переменные или общение потоков, но поверьте мне, на вашем уровне, боюсь, что вам придется решать баг 996 раз.
Будущий механизм
Callable
- Теперь, когда мы здесь, я думаю, вы можете догадаться, что функция Callable, представленная в Java 1.5, предназначена для решения проблемы этого возвращаемого значения.
- Callable — это интерфейс, функциональный интерфейс и общий интерфейс. call() имеет возвращаемое значение, и тип возвращаемого значения совпадает с типом универсального параметра, и может быть выдано исключение. Callable можно рассматривать как дополнение к интерфейсу Runnable.
Future
- Возможно, Future более известен, его обычно называют механизмом Future, а не механизмом Callable. Поскольку Callable может решить проблему отсутствия возвращаемого значения, что такое Future?
- Будущее генерируется для взаимодействия с Callable/Runnable. Поскольку есть возвращаемое значение, что возвращается? когда вернуться? Эти проблемы действительно можно засчитать в механизме Будущего.
- Короче говоря, я думаю, что Future — это дескриптор, то есть дескриптор, который вызываемая задача возвращает вызывающей стороне.Через этот дескриптор мы можем соединиться с этой асинхронной задачей.Мы можем использовать future для запроса, отмены и получения выполнения результат задачи Мост между вызывающим и асинхронным исполнителем.
FutureTask
- Теперь в основном ясно, что механизм Future должен решить проблему многопоточных возвращаемых значений. Но Callable, Future и RunnableFuture — это все интерфейсы, а интерфейсы не работают. Неважно, вот и FutureTask.
-
FutureTask реализует интерфейс RunnableFuture и имеет возможности Runnable и Future, то есть его можно использовать как Future для получения возвращаемого значения Callable, а можно использовать как Runnable.
-
FutureTask — это универсальный класс, ниже приведена демонстрация.
резюме
- Механизм Future — это не переименование Runnable, а расширение Runnable. Взаимодействие Callable, Future и FutureTask решает проблему отсутствия возвращаемого значения Runnable.
- Callable, Future и RunnableFuture — все это интерфейсы, а FutureTask незаметно работает за кулисами.
- Хоть существительных и больше, но они не такие уж и сложные, прочитав эту статью, вы сможете полностью понять их взаимосвязь. В многопоточной разработке ясно, как лучше всего пойти.