Идея Runnable
состоит в том, что это консолидированный кусок кода, который может быть выполнен чем-то другим внутри любого контекста, который он выбирает (в данном случае, потока). Второй поток вызовет метод run()
при запуске, поэтому вы можете захотеть вызвать foo()
в вашем методе MyClass.run()
. Вы не можете произвольно решить из основного потока, что второй поток теперь собирается отказаться от всего, что он делал в методе run()
, и начать работать с foo()
.