Sobes.tech
Junior

Callable жана Runnable интерфейстеринин айырмасы эмнеде?

sobes.tech AI

AIден жооп

Runnable — бул функционалдык интерфейс, ал ишти аткаруучу тапшырманы көрсөтөт. Ал бир метод run() бар, ал аргументтерди кабыл албайт1 жана маанилерди кайтарбайт. Ал фондук операцияларды аткаруу үчүн колдонулат, алардын жыйынтыгы талап кылынбайт:

Callable — бул параметрленген интерфейс, ал дагы бир ишти аткаруучу тапшырманы көрсөтөт. Ал бир метод call() бар, ал генерик тип <V> (эркин мааниге) кайтарат2 жана исключениелерди чыгара алат (типи Exception). Ал иштер үчүн ылайыктуу, алардын жыйынтыгын колдонуу керек:

Негизги айырмачылыктар:

Белги Runnable Callable
Кайтарылуучу маанилер Жок Ооба (тип {@code <V>})
Исключениелер Жок (метод {@code run}) Ооба (метод {@code call})
Метод {@code void run()} {@code V call() throws Exception}
Колдонуу {@code java.lang.Runnable} {@code java.util.concurrent.Callable}

Runnable колдонуу мисалы:

// Runnable ишке ашыруу:
Runnable task = new Runnable() {
    @Override
    public void run() {
        // Натыйжасыз операцияны аткарабыз
        System.out.println("Runnable иши аткарылды");
    }
};

// Туурала:
new Thread(task).start();

Callable колдонуу мисалы:

// Callable ишке ашыруу:
Callable<String> task = new Callable<String>() {
    @Override
    public String call() throws Exception {
        // Операцияны аткарып, натыйжаны кайтарабыз:
        return "Callable иши натыйжасы менен аткарылды";
    }
};

// ExecutorService аркылуу ишке ашырабыз:
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(task);

try {
    // Натыйжаны алабыз:
    String result = future.get();
    System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
} finally {
    executor.shutdown();
}