Sobes.tech
Junior

Callable va Runnable interfeyslari o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

Runnable - bu, iplik tomonidan bajarilishi mumkin bo'lgan vazifani ifodalovchi funksional interfeys. U run() metodiga ega bo'lib, u argument qabul qilmaydi1 va qiymat qaytarmaydi. Bu fon operatsiyalarini bajarish uchun ishlatiladi, natija talab qilinmaydi.

Callable - bu parametrlangan interfeys bo'lib, u ham iplik tomonidan bajarilishi mumkin bo'lgan vazifani ifodalaydi. U call() metodiga ega bo'lib, u generik <V> turini (har qanday qiymat)2 qaytaradi va Exception xatosini tashlashi mumkin. Natijasi foydalanilishi kerak bo'lgan vazifalar uchun mos keladi.

Asosiy farqlar:

Xususiyat Runnable Callable
Qaytish qiymati Yo'q Ha (tur {@code <V>})
Xatoliklar Yo'q (metod {@code run}) Ha (metod {@code call})
Metod {@code void run()} {@code V call() throws Exception}
Foydalanish {@code java.lang.Runnable} {@code java.util.concurrent.Callable}

Runnable dan foydalanish misoli:

// Runnable ni amalga oshirish:
Runnable task = new Runnable() {
    @Override
    public void run() {
        // Natija qaytarmaydigan operatsiyani bajaradi
        System.out.println("Runnable vazifa bajarildi");
    }
};

// Ipda ishga tushirish:
new Thread(task).start();

Callable dan foydalanish misoli:

// Callable ni amalga oshirish:
Callable<String> task = new Callable<String>() {
    @Override
    public String call() throws Exception {
        // Operatsiyani bajaradi va natija qaytaradi:
        return "Callable vazifa natija bilan bajarildi";
    }
};

// ExecutorService yordamida ishga tushirish:
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(task);

try {
    // Natijani olish:
    String result = future.get();
    System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
} finally {
    executor.shutdown();
}