Хоча вам потрібно пам’ятати, що безпека потоку повинна враховувати також навколишній код, вам здається, що вам пощастило. Той факт , що Matchers створюються з використанням патерну узгодження фабричного методу і відсутністю державних конструкторів є позитивним знаком. Аналогічно, ви використовуєте статичний метод компіляції для створення охоплюючого шаблону .
Отже, коротше, якщо ви робите щось на зразок прикладу:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
ви повинні робити добре.
Слідування за прикладом коду для наочності: зауважте, що цей приклад рівно передбачає, що створений таким чином Matcher є локальним потоком із шаблоном та тестом. Тобто, ви не повинні піддавати створений таким чином Матчер жодним іншим потокам.
Відверто кажучи, це ризик будь-якого питання щодо безпеки потоку. Реальність полягає в тому, що будь-який код можна зробити небезпечним для потоків, якщо ви постараєтесь досить. На щастя, є чудові книги, які навчають нас цілу купу способів, які ми могли б зіпсувати наш код. Якщо ми тримаємось осторонь цих помилок, ми значно зменшуємо власну ймовірність виникнення проблем з нарізкою.
compile()метод може бути не таким. Протягом багатьох років було дві або три помилки, які спричинили збій компіляції у багатопотокових середовищах. Я рекомендую робити компіляцію в синхронізованому блоці.