Что ж, легко предположить, что только потому, что запущены два фрагмента кода, это разные потоки следующим образом:
new Thread(work1).start()
new Thread(work2).start()
То, что они должны выполняться одновременно .Конечно, это не обязательно так, и будет определяться, в основном, ОС.Таким образом, вполне возможно, что, разбивая часть последовательной работы на большое количество параллельных суб-вычислений, все, что вы делаете, это создает накладные расходы на создание объектов и переключение контекста.
Однако Фреймворк ForkJoin , который находится под системой акторов Scala, должен соответствующим образом определять размер внутреннего пула потоков.Это устраняет ненужные издержки переключения контекста, оставляя только накладные расходы любого (возможно ненужного) объекта / создания