Хотя вам нужно помнить, что безопасность потоков также должна учитывать окружающий код, вам, похоже, повезло. Тот факт, что сопоставители создаются с использованием метода фабрики сопоставлений Pattern и не имеют общедоступных конструкторов, является положительным знаком. Точно так же вы используете статический метод compile для создания охватывающего Pattern .
Короче говоря, если вы сделаете что-то вроде примера:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
у тебя все должно быть хорошо.
Продолжение примера кода для ясности: обратите внимание, что этот пример строго подразумевает, что созданный таким образом Matcher является локальным для потока с шаблоном и тестом. То есть вы не должны открывать созданный таким образом Matcher для каких-либо других потоков.
Честно говоря, это риск возникновения вопросов о безопасности потоков. Реальность такова, что любой код можно сделать небезопасным для потоков, если вы достаточно постараетесь. К счастью, есть замечательные книги, которые учат нас множеству способов испортить наш код. Если мы избегаем этих ошибок, мы значительно уменьшаем нашу собственную вероятность возникновения проблем с потоками.
compile()
метод может быть нет. За прошедшие годы было обнаружено две или три ошибки, которые приводили к сбою компиляции в многопоточных средах. Я бы рекомендовал делать компиляцию в синхронизированном блоке.