Поскольку вы создаете новый экземпляр ParserClass
на каждой итерации цикла, а также создаете и запускаете новый поток на каждой итерации, вам не требуется блокировка в вашем методе ParseXML
.
Ваш объект, для которого вы блокируете, в настоящее время static
, поэтому он не привязан к экземпляру, что означает, что как только один поток находится внутри вашего ParseXML
метода, никто другой не сможет ничего сделать, пока не завершится первый.
Вы не делитесь никакими данными (из кода, который я вижу) в вашем классе Parser между потоками, поэтому вам не нужна блокировка внутри вашей функции ParseXML
.
Если выиспользуя данные, которые совместно используются потоками, у вас должна быть блокировка.
Если вы собираетесь использовать много потоков, тогда вам лучше использовать ThreadPool и брать конечное число (4, возможно,) из вашего пула, назначив им некоторую работу и переработав их для следующих 4 задач.
Создание потоков - это дорогостоящая операция, которая требует обращения к ядру ОС, поэтому вы не хотите делать это 500 раз.Это слишком дорого.Кроме того, минимальная зарезервированная память для стека потоков в Windows составляет 1 МБ, то есть 500 МБ в одном только стековом пространстве для ваших потоков.
Оптимальное количество потоков должно быть равно количеству ядер на вашей машине, однако, поскольку это не реально для большинства целей, вы можете сделать это в два или три раза, но тогда вам лучше использовать пул потоковгде вы перерабатываете потоков, вместо , постоянно создающих новые.