Оба интерфейса используются для описания задач, которые можно выполнять в потоках.
🔹 Runnable — это интерфейс, предназначенный для выполнения задачи, которая ничего не возвращает и не выбрасывает проверяемых исключений. Метод run() не имеет возвращаемого значения:
public interface Runnable {
void run();
}🔹 Callable — это интерфейс, который используется для выполнения задачи, которая возвращает результат и может выбрасывать проверяемые исключения. Метод call() возвращает объект:
public interface Callable<V> {
V call() throws Exception;
}