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