Java Callable Future Example

en av fördelarna med Java executor framework är att vi kan köra samtidiga uppgifter som kan returnera ett enda resultat efter bearbetning av uppgifterna. Java Concurrency API uppnår detta med följande två gränssnitt Callableoch Future.

Java-Anropbara och framtida gränssnitt

1.1. Callable

Callable gränssnittet har metoden call(). I den här metoden måste vi implementera logiken i en uppgift. Callable – gränssnittet är ett parametriserat gränssnitt, vilket innebär att vi måste ange vilken typ av data call() – metoden kommer att returnera.

2.2. Future

Future gränssnitt har metoder för att erhålla resultatet som genereras av ett Callable objekt och för att hantera dess tillstånd.

Java Callable Future Example

i det här exemplet skapar vi en FactorialCalculator som är av typen Callable. Det betyder att vi kommer att åsidosätta det är call() metod och efter beräkning kommer vi att returnera resultatet från call() metod. Detta resultat senare kan hämtas från Future referens som innehas av huvudprogrammet.

låt oss nu testa ovanstående faktorkalkylator med två trådar och 4 nummer.

programutgång.

här skickade vi ett Callable – objekt som ska köras i en exekutör med metoden submit(). Denna metod tar emot ett Callable – objekt som en parameter och returnerar ett Future – objekt som vi kan använda med två huvudmål–

  1. vi kan kontrollera status för uppgiften – vi kan avbryta uppgiften och kontrollera om den är klar. För detta ändamål har vi använt metoden isDone() för att kontrollera om uppgifterna var färdiga.
  2. vi kan få resultatet tillbaka med call () – metoden. För detta ändamål har vi använt get() – metoden. Denna metod väntar tills objektet Callable har slutfört exekveringen av metoden call() och har returnerat resultatet.

    om tråden avbryts medan get() – metoden väntar på resultatet, kastar den ett InterruptedException undantag. Om metoden call() kastar ett undantag, kastar den här metoden ett ExecutionException undantag.

Future – gränssnittet ger en annan version av get() – metoden,dvs get(longtimeout, TimeUnitunit). Den här versionen av get-metoden, om resultatet av uppgiften inte är tillgängligt, väntar på den under den angivna tiden. Om den angivna tidsperioden går och resultatet ännu inte är tillgängligt returnerar metoden ett null – värde.

Lyckligt Lärande !!

var det här inlägget till hjälp?

Låt oss veta om du gillade inlägget. Det är det enda sättet vi kan förbättra.
Ja
Nej