Если у вас несколько потоков одного типа *, вы можете изменить свой код так, чтобы он запускал только один из потоков каждого типа (или, возможно, поместить его в файл конфигурации приложения, чтобы вы могли быстро изменить его во время отладки).
Если приложение по-прежнему плохо себя ведет, то вы знаете, что причиной взаимодействия является взаимодействие между различными типами потоков. Если этого не произойдет, возможно, существует ресурс, который вы не заблокировали потоком (например).
То, что я пытаюсь сказать, это упростить ваше приложение до такой степени, что оно использует минимальное количество потоков, чтобы все еще оставаться вашим оригинальным дизайном.
* Не лучшее слово для использования, но, например, если вы породили 10 потоков, чтобы иметь дело с файловым вводом-выводом только 1.