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();
}