Sobes.tech
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 arvatud RuntimeException).
  • Sobib ülesannetele, mis lihtsalt täidetakse ilma tulemuse tagastamiseta.

Callable

  • Meetod call(): V call() throws Exception; (kus V on tagastatava väärtuse tüüp).
  • Tagastab väärtuse (tüüp on määratletud <V>-s).
  • Võib visata kontrollitavat erandit.
  • Sageli kasutatakse koos ExecutorService ja Future-ga asünkroonsete ülesannete täitmiseks ja nende tulemuste saamiseks.

Kasutamine ExecutorService-is:

  • Runnable antakse edasi execute(Runnable task) või submit(Runnable task)-le. Meetod submit tagastab Future<?>.
  • Callable antakse edasi submit(Callable<T> task)-le. Meetod submit tagastab Future<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";
    }
}