Middle
546
Qual é a diferença entre as interfaces Runnable e Callable em Java?
Resposta da IA
sobes.tech IA
A principal diferença é que Runnable não pode devolver um resultado nem lançar uma exceção verificada, enquanto que Callable pode.
Runnable
- Método
run():void run(); - Não devolve valor.
- Não pode lançar uma exceção verificada (aquelas que herdam de
Exception, excetoRuntimeException). - Adequado para tarefas que simplesmente são executadas sem devolver um resultado.
Callable
- Método
call():V call() throws Exception;(ondeVé o tipo de valor devolvido). - Devolve um valor (o tipo é especificado em
<V>). - Pode lançar uma exceção verificada.
- Frequentemente usado com
ExecutorServiceeFuturepara execução assíncrona de tarefas e obtenção dos seus resultados.
Utilização em ExecutorService:
Runnableé passado paraexecute(Runnable task)ousubmit(Runnable task). O métodosubmitdevolve umFuture<?>.Callableé passado parasubmit(Callable<T> task). O métodosubmitdevolve umFuture<T>.
Exemplo de Runnable:
// Exemplo Runnable
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Tarefa Runnable a correr...");
}
}
Exemplo de Callable:
// Exemplo Callable
import java.util.concurrent.Callable;
public class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("Tarefa Callable a correr...");
return "Tarefa concluída";
}
}