Если вы вызываете run () напрямую, код запускается в вызывающем потоке. Вызывая start (), создается новый поток, отличный от основного потока, и выполняется параллельно.