logo

Java tulevaisuuden esimerkki

Sisään Java , Tulevaisuus on käyttöliittymä joka kuuluu java.util.concurrent paketti . Sitä käytetään edustamaan asynkronisen laskennan tulosta. Käyttöliittymä tarjoaa menetelmät tarkistaa, onko laskenta suoritettu vai ei, odottaa sen valmistumista ja hakea laskennan tulos. Kun tehtävä tai laskenta on suoritettu, laskentaa ei voi peruuttaa.

Syntaksi:

 public interface Future 

Esimerkki Java Futuresta

Paras esimerkki Java Futuresta on ExecutorService käyttöliittymä. Se tuottaa Future-objektin (joistakin niiden menetelmistä) yhden tai useamman asynkronisen tehtävän edistymisen seuraamiseksi.

Tulevaisuuden käyttöliittymän menetelmät

Käyttöliittymä tarjoaa seuraavat viisi tapaa:

Menetelmä Kuvaus
peruuttaa() Se yrittää peruuttaa tehtävän suorittamisen.
saada() Menetelmä odottaa tarvittaessa laskennan valmistumista ja hakee sitten tuloksensa.
saada() Odottaa tarvittaessa korkeintaan annetun ajan, kunnes laskenta on valmis, ja hakee sitten tuloksensa, jos sellainen on saatavilla.
on peruutettu() Palauttaa tosi, jos tehtävä peruutettiin ennen sen valmistumista.
on tehty() Palauttaa tosi, jos tehtävä on suoritettu.

Future-käyttöliittymässä oli joitain puutteita, jotka ovat seuraavat:

  • Futurea käytettäessä laskentaa ei voi suorittaa manuaalisesti.
  • Se ei ilmoita, kun kommutointi on valmis.
  • Sen ketjua ei voi luoda ja yhdistää.

Yllä olevien rajoitusten voittamiseksi, Java 8 otettu käyttöön Täydellinen tulevaisuus .

Tulevaisuuden käyttö asynkronisessa ohjelmoinnissa

Tuloksen saaminen

Kuten olemme edellä käsitelleet, Tulevaisuus edustaa asynkronisen tehtävän tulosta. Asynkronisen tehtävän tuloksen hakemiseksi Java Future -käyttöliittymä tarjoaa seuraavat kaksi get()-menetelmien versiota, jotka molemmat palauttavat objektin. Huomaa, että palautustyyppi voi olla yleinen tyyppi. Esimerkiksi:

 Future future = ... // get Future by starting async task // do something else, until ready to check result via Future // get result from Future try { Object result = future.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } 

Huomautus: Jos yritämme kutsua get()-metodia ennen kuin asynkroninen tehtävä on valmis, get()-metodi estää, kunnes tulos on valmis.

Yllä olevan puutteen voittamiseksi Future-käyttöliittymä tarjoaa toisen version get()-menetelmästä, joka ei sisällä aika (millisekunteina) parametrina. Se edustaa sitä, että Tulevaisuus odottaa jonkin aikaa tehtävän suorittamiseen sen jälkeen, kun tulos on saatavilla Tulevaisuudessa. Esimerkiksi:

 try { Object result = future.get(1000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { } catch (ExecutionException e) { } catch (TimeoutException e) { // thrown if timeout time interval passes // before a result is available. } 

Jos Future ei saa tulosta määritetyn ajan kuluessa, a TimeoutException on tulevaisuuden heittämä.

Peruuta asynkroninen tehtävä

Voimme myös peruuttaa asynkronisen tehtävän milloin tahansa soittamalla numeroon peruuttaa() Tulevaisuuden käyttöliittymän menetelmä. Esimerkiksi:

 Future future = ... // Get Future from somewhere future.cancel(); 

Tarkista, onko asynkroninen tehtävä tehty

Käyttöliittymä tarjoaa menetelmän on tehty() tarkistaaksesi, onko asynkroninen tehtävä suoritettu vai ei. Esimerkiksi:

 Future future = ... // Get Future from somewhere if(future.isDone()) { Object result = future.get(); } else { // do something else } 

Tarkista, onko asynkroninen tehtävä peruutettu

Future-käyttöliittymä tarjoaa menetelmän on peruutettu() tarkistaaksesi, onko Future:n edustama asynkroninen tehtävä peruutettu vai ei. Se palauttaa tosi, jos tehtävä peruutetaan onnistuneesti, muussa tapauksessa palauttaa epätosi. Esimerkiksi:

 Future future = ... // get Future from somewhere if(future.isCancelled()) { } else { } 

Esimerkki Java Futuresta

FutureExample.java

 import java.util.concurrent.*; public class FutureExample { public static void main(String args[]) throws InterruptedException, ExecutionException { //ExecutorService allows us to execute tasks on threads asynchronously ExecutorService es = Executors.newSingleThreadExecutor(); //getting future //the method submit() submits a value-returning task for execution and returns the Future Future future = es.submit(() -> { //sleep thread for 2 seconds Thread.sleep(2000); return 'Welcome to Javatpoint'; }); //checks if the task is completed or not while(!future.isDone()) { System.out.println('The task is still in process.....'); //sleep thread for 2 milliseconds Thread.sleep(200); } System.out.println('Task completed! getting the result'); //getting the result after completing the task String result = future.get(); //prints the result System.out.println(result); es.shutdown(); } } 

Lähtö:

Java tulevaisuuden esimerkki