Concorrenza in Java con Callable

Mattepuffo's logo
Concorrenza in Java con Callable

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!


Condividi

Commentami!