Callable, который не возвращает значение

Callable, который не возвращает значение

Метод run() интерфейса Runnable отличается от метода call() интерфейса Callable тем, что он не возвращает никакого значения и не выбрасывает исключения. Однако, если потребуется, чтобы метод call() тоже не возвращал значение, то в качестве параметризованного параметра можно передать Void.


class Apartment implements Callable<Void> {
    boolean booked;

    Apartment(boolean booked) {
        this.booked = booked;
    }

    @Override
    public Void call() throws Exception {
        if (booked) {
            throw new Exception("The appatment is booked");
        }
        System.out.println("The apartment is available for booking");
        return null;
    }
}


Apartment apartment = new Apartment(false);
ExecutorService ex = Executors.newSingleThreadExecutor();
Future future = ex.submit(apartment);
try {
    future.get(); // The apartment is available for booking
} catch (Exception e) {
   System.out.println(e.getMessage());
 } finally {
   ex.shutdownNow();
 }
Многопоточность