Это неправильный подход.
Проблема в том, что, пока объект находится в стадии разработки, его тип все еще не является самым производным типом, а типом выполняемого конструктора. Это означает, что при запуске потока объект все еще является Runnable
, и вызов run()
может быть отправлен на Runnable::run()
, который является чисто виртуальным, и это, в свою очередь, приведет к неопределенному поведению.
Еще хуже, вы можете столкнуться с ложным чувством безопасности, так как в некоторых случаях запускаемый поток может занять достаточно много времени, чтобы текущий поток завершил конструктор Runnable
, и введите объект myThread
, и в этом случае новый поток выполнит правильный метод, но изменит систему, в которой вы выполняете программу (другое количество ядер, или загрузку системы, или любое другое несвязанное обстоятельство), и программа выполнит падение производства.