Concorrenza in Java con Callable
Callable è un'interfaccia per Java che permette di impostare che una classe deve essere eseguita in thread.
Callable ci permette di scrivere codice un pò più flessibile rispetto alla classe Thread.
Rispetto a Runnable, inoltre è parametrizzabile e può sollevare un'eccezione checked.
Vediamo un esempio:
import java.util.concurrent.Callable;
public class ConcorrenzaCallable implements Callable<Integer> {
private int numero = 0;
public ConcorrenzaCallable(int numero) {
this.numero = numero;
}
@Override
public Integer call() throws Exception {
for (int i = 0; i <= numero; i++) {
if (i == 5) {
numero = i;
break;
}
}
return numero;
}
}
Richiamiamo tutto così:
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Main {
public static void main(String[] args) {
try {
ExecutorService es = Executors.newSingleThreadExecutor();
ConcorrenzaCallable cl = new ConcorrenzaCallable(10);
Future<Integer> f = es.submit(cl);
Integer numero = f.get();
System.out.println(numero);
es.shutdown();
} catch (InterruptedException | ExecutionException ex) {
System.out.println(ex.getMessage());
}
}
}
Enjoy!
java thread callable executorservice
Commentami!