Поиск по этому блогу

воскресенье, 19 октября 2014 г.

Вопросы на собеседовании Java программиста. Java Runnable vs Callable

Очень интересный и популярный вопрос на собеседованиях. Чем отличаются два интерфейса для реализации задач Runnable и Callable.

Основные различия



  1. Интерфейс Runnable появиля в Java 1.0, а интерфейс Callable был введен в Java 5.0 в составе библиотеки java.util.concurrent.
  2. Классы, реализующие  интерфейс Runnable должны реализовывать метод run() для выполнения задачи. Классы, реализующие интерфейс Callable должны реализовывать метод call() для выполнения задачи.
  3. Метод Runnable.run() не возвращает никакого значения, его тип void, а метод Callable.call() может возвращать значение типа T. Интерфейс Callable является параметризированным  Callable<T> и тип значения, которое будет возвращаться в методе call() задается этим параметром T. 
  4. Метод run() не может бросить проверяемое исключение, в то время как метод call() может бросить проверяемое исключение.


Пример реализации интерфейсов Runnable и Callable


import java.util.concurrent.Callable;
 
public class RunVsCalEx {
 
 public static void main(String[] args) throws Exception {
  Runnable callback1 = new Runnable() {
 
   @Override
   public void run() {
   }
  }; 
  process(callback1);
 
  Callable<String> callback2 = new Callable<String>() {
 
   @Override
   public String call() throws Exception {
    String str = "String from callback";
    return str;
   }
  };  
  processString(callback2);
 }
 
 private static void process(Runnable callback) {
  for (int i = 0; i <= 100; i++) {
   if (i == 100) {
    callback.run();
   }
  }
 }
 
 private static void processString(Callable<String> callback) 
   throws Exception {
  for (int i = 0; i <= 100; i++) {
   if (i == 100) {
    callback.call();
   }
  }
 }
 
}

Источники


http://java67.blogspot.ru/2013/01/difference-between-callable-and-runnable-java.html
http://stackoverflow.com/questions/141284/the-difference-between-the-runnable-and-callable-interfaces-in-java
http://pro-java.ru/java-dlya-opytnyx/interfejsy-callable-i-future-v-java/

Комментариев нет:

Отправить комментарий