Junior
Aký je rozdiel medzi rozhraniami Callable a Runnable?
sobes.tech AI
Odpoveď od AI
Runnable - je funkčné rozhranie, ktoré predstavuje úlohu, ktorú môže spustiť vlákno. Má metódu run(), ktorá neprijíma argumenty1 a nevracia hodnotu. Používa sa na vykonávanie operácií na pozadí, ktoré nevyžadujú výsledok.
Callable - je parametrizované rozhranie, ktoré tiež predstavuje úlohu, ktorú môže spustiť vlákno. Má metódu call(), ktorá vracia generický typ <V> (ľubovoľnú hodnotu)2 a môže vyhodiť výnimku (Exception). Je vhodné pre úlohy, ktorých výsledok je potrebné použiť.
Hlavné rozdiely:
| Vlastnosť | Runnable |
Callable |
|---|---|---|
| Návratová hodnota | Nie | Áno (typ {@code <V>}) |
| Výnimky | Nie (metóda {@code run}) | Áno (metóda {@code call}) |
| Metóda | {@code void run()} | {@code V call() throws Exception} |
| Použitie | {@code java.lang.Runnable} | {@code java.util.concurrent.Callable} |
Príklad použitia Runnable:
// Implementácia Runnable:
Runnable task = new Runnable() {
@Override
public void run() {
// Vykonáva operáciu bez návratu výsledku
System.out.println("Runnable úloha vykonaná");
}
};
// Spustenie v vlákne:
new Thread(task).start();
Príklad použitia Callable:
// Implementácia Callable:
Callable<String> task = new Callable<String>() {
@Override
public String call() throws Exception {
// Vykonáva operáciu a vracia výsledok:
return "Callable úloha vykonaná s výsledkom";
}
};
// Spustenie pomocou ExecutorService:
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(task);
try {
// Získanie výsledku:
String result = future.get();
System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
} finally {
executor.shutdown();
}