Si bien debe recordar que la seguridad de los subprocesos también debe tener en cuenta el código circundante, parece que tiene suerte. El hecho de que los Matchers se creen utilizando el método de fábrica de Matcher de Pattern y carezcan de constructores públicos es una señal positiva. Asimismo, utiliza el método estático de compilación para crear el patrón que lo abarca .
Entonces, en resumen, si haces algo como el ejemplo:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
deberías estar haciéndolo bastante bien.
Siga el ejemplo de código para mayor claridad: tenga en cuenta que este ejemplo implica fuertemente que el Matcher así creado es local de subproceso con el Patrón y la prueba. Es decir, no debe exponer el Matcher así creado a ningún otro hilo.
Francamente, ese es el riesgo de cualquier pregunta de seguridad de subprocesos. La realidad es que cualquier código puede convertirse en subproceso inseguro si se esfuerza lo suficiente. Afortunadamente, hay libros maravillosos que nos enseñan un montón de formas en las que podríamos arruinar nuestro código. Si nos mantenemos alejados de esos errores, reducimos en gran medida nuestra propia probabilidad de enhebrar problemas.
compile()
método no lo sea. Ha habido dos o tres errores a lo largo de los años que provocaron fallas en la compilación en entornos multiproceso. Recomendaría hacer la compilación en un bloque sincronizado.