Interfață Java a apelabilității și utilizarea acestuia

Ce este o interfață Java catalabilă? Această interfață este legată semnificativ la programarea concurentă. Când cineva începe să lucreze în Java, apare rapid clasa firului care ne permite să rulam sarcini concurente. Cu toate acestea, aveți unele limitări, să vedem un exemplu:

package com.arquitecturajava;public class Tarea implements Runnable {@Overridepublic void run() {int total = 0;for(int i=0;i<5;i++) {total+=i;try {Thread.sleep(300);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println(Thread.currentThread().getName());System.out.println(total);}}

Tocmai am creat o sarcină care implementează interfața runnabilă. Putem de la ea pentru a crea un fir sau fir care o execută și ne imprimă pe ecran suma primilor 5 termeni după 1500 milisecunde (bucla ITERA de 5 ori).

package com.arquitecturajava;public class PrincipalHilo {public static void main(String args) {Tarea t= new Tarea();Thread hilo= new Thread(t);hilo.start();}}

Rezultatul pe care îl vedem că acesta apare prin consola:

javacallabhreads

Totul a funcționat corect. Problema este că suntem forțați să imprimăm datele de către consolă. Metoda de alergare a interfeței runnabile nu returnează nimic.

Transferat Runnable Java

Interfață Java Scuilabilă

Majoritatea ocaziilor avem nevoie de o sarcină paralelă de executat și apoi va fi returnat un rezultat. Cum putem face asta? . Java prevede aceste situații ale interfeței apelabile, să o vedem.

package com.arquitecturajava;import java.util.concurrent.Callable;public class MiCallable implements Callable<Integer> {@Overridepublic Integer call() throws Exception {int total = 0;for(int i=0;i&lt;5;i++) {total+=i;try {Thread.sleep(300);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println(Thread.currentThread().getName());return total;}}

În acest caz găsim ceva foarte asemănător, dar folosim interfața apelabilă. Această interfață are metoda de apel care este capabilă să ne returneze un rezultat că metoda de alergare nu permite.

Publicul gol ();

Public T Apel ();

Am creat doar o clasă care a implementat interfața Java selectată. Este timpul să îl folosiți dintr-o metodă principală.

package com.arquitecturajava;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class PrincipalCallable {public static void main(String args) {try {ExecutorService servicio= Executors.newFixedThreadPool(1);Future<Integer> resultado= servicio.submit(new MiCallable());if(resultado.isDone()) {System.out.println(resultado.get()); }} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ExecutionException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

În acest caz am folosit executanService pentru a crea o piscină cu fir cu un singur fir și trimite sarcina la piscină folosind metoda Trimitere.

Ca obiect Java>” width=”412″ height=”166″ data-lazy-src=”https://www.arquitecturajava.com/wp-content/uploads/JavaCallableObjeto.jpg” class=”alignnone”> </p>
<div> <img loading=

Când invocăm serviciul, vom primi automat o variabilă de tip viitoare care va primi într-o valoare viitoare la care 10 pe care le putem imprima utilizând metoda GET ().

Viitorul Java Spelabil Get

Rezultatul pe consola este similar, singura diferență este că folosim o piscină de fire.

JavaCallable

Am primit date de returnare dintr-o sarcină care rulează în paralel

Alte elemente conexe: Serviciu de executor Java și filetare, Java Așteptați Notificare și fire, promisiune JavaScript și programare asincronă

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *