На платформе Java роли, которые реализуют асинхронные вызовы, имеют следующие три роли: реальные данные вызывающего абонента в коносам
Когда вызывающий абонент вызывает трудоемкую работу и не может немедленно вернуть данные, он сначала вернет коносам.
Пойдите в магазин тортов, чтобы купить пирожные, вам не нужно ждать, когда будет сделан торт (при условии, что это займет много времени, чтобы сделать это), вам просто нужно получить коносам (иди, чтобы сделать что -то еще) .
открытый класс {public static void main (string [] args) {System.out.println ("Main Begin"); data2 = host.request (20, 'b'); Catch (прерывание Exception e) {} System.out.println ("Main Job End"); data2 .getContent ());
Основной класс здесь эквивалентно «клиенту», и хост эквивалентен «Cake Shop». эквивалентно получению товара. После некоторого периода времени (после того, как в течение некоторого периода времени) вызов DATA1.getContent (), что означает получение коносамента для получения результата исполнения.
Давайте посмотрим на то, что сделал магазин тортов после того, как клиент заказал торт:
Общественный класс host {public data request (final int count, final char c) {System.out.println ("запрос (" + count + "," + c + ") начинается"); Entity Final Futureata Future = New Futuredata (); Внутренний класс. Realdata realdata = new Realdata (count, c); // (3) Получить объект Futuretata как возвращаемое значение возврата будущего;
Получив запрос, хозяин («магазин тортов») стал будущим «Книга коноса», а затем заказал «Создатель тортов», чтобы сделать торт. Полем Тогда то, что хост возвращается к клиенту, - это просто будущее «Книга конов», а не торт. После того, как торт закончен, производитель тортов может дать соответствующую торт «Книга коноса», то есть Future.setRealdata (Realdata).
Давайте посмотрим, как производитель тортов делает пирожные:
Создайте строку, содержащую символы C -count C.
Public Class Realdata реализует Data {Private Final String Content; Buffer = char [count]; .println («Создание realdata (" + count + "," + c + ") end");
Теперь давайте посмотрим, как будущее «коносам» соответствует «содержанию» торта:
Общедоступный класс Futureata реализует данные {Private Realdata realdata = null; } this.Realdata = realdata; ();
После того, как клиент заканчивает свой собственный бизнес, он возьмет свою собственную «книгу конов», чтобы забрать торт:
System.out.println ("data1 =" + data1.getContent ());
Если торт не готов, вы должны подождать:
while (! Готово) {try {wait ();
Программный анализ
Для каждого запроса хост будет генерировать ветку, которая отвечает за создание «торта», необходимого клиенту. После некоторого ожидания, если торт не готов, клиенты должны ждать. Клиент может забрать торт только до тех пор, пока «торт не будет сделан», то есть Future.setRealdata (Realdata);
Каждая ветка отвечает за создание «торта», который нужен конкретному клиенту. То есть клиент A соответствует мастеру торта, а клиент B соответствует мастеру торта B. Даже если торт клиента B подготовлен в первую очередь, клиент A может ждать только мастера торта, чтобы приготовить торт. Другими словами, между клиентами нет конкурентных отношений.
Два метода Fuburedata настроены на синхронизация. Не имеет значения, готов ли торт.
Это на протяжении всей этой статьи.