Все статические члены класса существуют, даже если не существует экземпляров класса.Они инициализируются за некоторое время до первого использования и очищаются после завершения программы.
Если бы у вас было два одновременных вызова статического метода, они работали бы с одной и той же копией любых статических членов класса (если они их использовали).Поэтому, если статический метод работает со статическим членом (или параметром), он должен делать это потокобезопасным способом.Если статический метод работает только с локальными, то сам метод, как правило, является потокобезопасным.
Что касается того, как среда выполнения различает двух вызывающих, то это сущность потоков.Каждый поток имеет свой собственный стек вызовов с собственной копией любых локальных переменных, параметров, адреса возврата и т. Д. Таким образом, эти два вызова не перепутаны, и каждый из них правильно возвращает вызывающему объекту.Единственная проблема, опять же, заключается в том, работает ли статический метод на статическом элементе, который не является потокобезопасным (или параметром, который не является потокобезопасным).