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