Компилятор оптимизирует строки с одинаковым значением и делает их точно такими же экземплярами, когда они являются частью кода, как в:
if ("abc" == "abc")
Но если строка создается во время выполнения, как в вашемв случае, когда тест String анализируется с URL-адреса, он не оптимизируется таким же образом и является его собственным экземпляром.
Таким образом, http://localhost/test/name1, выполненный дважды, создаст два отдельных экземпляра строки, которые будутне сравнивать ==, а это означает, что синхронизация с ним не даст ожидаемых результатов.
Кажется, что вы пытаетесь сделать обработку одних и тех же "тестовых" значений синхронной, но допускаете, чтобы разные тестовые значенияобрабатывать асинхронно. Если это так, то вы можете сделать что-то вроде сохранения карты значений, которые обрабатываются, где «тестовое» значение является ключом, а экземпляр Object сохраняется как значение, используемое в качестве мьютекса. Затем выполните синхронизацию с мьютексом после его поиска.