Статическая функция внутри класса такая же ОО, как и глобальная функция внутри модуля. Дело в JAVA, у вас нет выбора.
В C ++ вы можете инкапсулировать свои глобальные функции в пространствах имен, для этого вам не нужен фиктивный класс. Таким образом, у вас есть модульность.
Так что, конечно, вы можете размещать функции вне пространств имен таким образом, чтобы у вас были действительно глобальные функции. Но это не очень отличается от класса кухонной мойки JAVA с кучей статических функций. Это также плохой код, но может подойти для небольших проектов:)
Также в C ++ у вас есть много вариантов иметь «глобальную» функцию, которая фактически связана с классом, как операторные функции, которые могут быть, например, друзьями класса.
EDIT
Что касается многопоточности, вам нужно беспокоиться о глобальных переменных, а не о функциях.