Middle
Mis vahe on Java liidestel Runnable ja Callable?
sobes.tech AI
Vastus AI-lt
Peamine erinevus seisneb selles, et Runnable ei saa tagastada tulemust ega visata kontrollitavat erandit, samas kui Callable saab.
Runnable
- Meetod
run():void run(); - Ei tagasta väärtust.
- Ei saa visata kontrollitavat erandit (neid, mis pärivad
Exception-ist, välja arvatudRuntimeException). - Sobib ülesannetele, mis lihtsalt täidetakse ilma tulemuse tagastamiseta.
Callable
- Meetod
call():V call() throws Exception;(kusVon tagastatava väärtuse tüüp). - Tagastab väärtuse (tüüp on määratletud
<V>-s). - Võib visata kontrollitavat erandit.
- Sageli kasutatakse koos
ExecutorServicejaFuture-ga asünkroonsete ülesannete täitmiseks ja nende tulemuste saamiseks.
Kasutamine ExecutorService-is:
Runnableantakse edasiexecute(Runnable task)võisubmit(Runnable task)-le. MeetodsubmittagastabFuture<?>.Callableantakse edasisubmit(Callable<T> task)-le. MeetodsubmittagastabFuture<T>.
Näide Runnable:
// Näide Runnable
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Runnable ülesanne töötab...");
}
}
Näide Callable:
// Näide Callable
import java.util.concurrent.Callable;
public class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("Callable ülesanne töötab...");
return "Ülesanne lõpetatud";
}
}