Sobes.tech
Junior — Middle

Quali sono le differenze tra le interfacce Runnable e Callable in Java?

sobes.tech AI

Risposta dell'AI

Le interfacce Runnable e Callable in Java sono utilizzate per eseguire compiti in thread separati, ma hanno differenze chiave:

  • Runnable:

    • Il metodo run() non restituisce risultato e non può lanciare eccezioni controllate.
    • Viene usato quando il compito non richiede di restituire un valore.
    • Esempio:
      Runnable compito = () -> System.out.println("Esecuzione del compito");
      new Thread(compito).start();
      
  • Callable<V>:

    • Il metodo call() restituisce un risultato di tipo V e può lanciare eccezioni.
    • Viene usato quando è necessario ottenere il risultato dell'esecuzione del compito.
    • Di solito si utilizza con ExecutorService e Future.
    • Esempio:
      Callable<Integer> compito = () -> {
          // calcoli
          return 123;
      };
      ExecutorService executor = Executors.newSingleThreadExecutor();
      Future<Integer> futuro = executor.submit(compito);
      Integer risultato = futuro.get();
      executor.shutdown();
      

In questo modo, Callable amplia le funzionalità di Runnable, consentendo di restituire risultati e gestire eccezioni.