Question 1
Which two statements correctly distinguish Callable from Runnable? (Choose two.)
A. Callable.call() returns a value, while Runnable.run() returns voidCorrect answer
Callable<V> declares V call(), producing a result, whereas Runnable declares void run() and returns nothing, the defining signature difference.
B. Callable.call() can throw checked exceptions, while Runnable.run() declares noneCorrect answer
call() is declared throws Exception, so it may propagate checked exceptions, while run() has an empty throws clause and must handle or wrap checked exceptions internally.
C. Only Runnable can be submitted to an ExecutorService
ExecutorService.submit is overloaded for both; a submitted Runnable yields a Future whose get() returns null (or a supplied result value).
D. Callable tasks always run on a newly created platform thread
Where a task runs is the executor's policy, pooled platform threads, per-task virtual threads, or even the calling thread, and the task interface says nothing about it.
Explanation
The distinction is entirely in the two method signatures: V call() throws Exception versus void run(). Callable can both return a result and propagate a checked exception; Runnable can do neither and must catch or wrap any checked exception inside run(). Neither interface constrains which executor or thread runs the task, and both can be submitted to an ExecutorService, so a value-returning or checked-throwing lambda passed to submit is inferred as a Callable while a void lambda is a Runnable.