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 Callable
och 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–
- 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. - vi kan få resultatet tillbaka med call () – metoden. För detta ändamål har vi använt
get()
– metoden. Denna metod väntar tills objektetCallable
har slutfört exekveringen av metodencall()
och har returnerat resultatet.om tråden avbryts medan
get()
– metoden väntar på resultatet, kastar den ettInterruptedException
undantag. Om metodencall()
kastar ett undantag, kastar den här metoden ettExecutionException
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 !!