Это не обязательно так.
В зависимости от алгоритма часто имеет смысл разделить его на несколько потоков, даже если доступно только одно ядро. Если есть ожидания на сокетах, IO и т. Д., Вы можете получить выгоду от этого. Если есть 2 процесса, «другой» процесс может не использовать 100% другого ядра, поэтому многопоточность здесь может помочь. В этом случае доверьтесь своей ОС, чтобы правильно с ней справиться.
Вы всегда можете проверить число процессоров с помощью Runtime.availableProcessors (), чтобы определить, как разделить его на отдельные потоки. В качестве альтернативы вы можете использовать пул потоков, который должен корректно масштабироваться с большим количеством процессоров.
В целом, я бы разработал ваш алгоритм для использования более чем одного процессора, если алгоритм имеет смысл распараллеливать. В большинстве систем будет доступно больше ядер / процессоров, и вы всегда сможете настроить свою реализацию позже, если вам это понадобится. Если процесс выполняется долго, затраты на генерацию потока будут того стоить - если он уже быстрый, возможно, стоит поискать другие места для оптимизации.