Si bien es necesario recordar que la seguridad hilo tiene que tomar en cuenta el código alrededores, así, que parecen estar en suerte. El hecho de que Matchers se creen usando el método de fábrica matcher de Pattern y carezca de constructores públicos es un signo positivo. Del mismo modo, utiliza el método estático compile para crear el abarcador Pattern.
Así, en pocas palabras, si haces algo como el ejemplo:
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
que debería estar haciendo bastante bien.
Seguimiento del ejemplo del código para mayor claridad: tenga en cuenta que este ejemplo implica fuertemente que el Matcher así creado es thread-local 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 cuestión de seguridad de hilos. La realidad es que cualquier código puede hacerse inseguro si se esfuerza lo suficiente. Afortunadamente, hay wonderfulbooks que nos enseñan un montón de formas en que podríamos arruinar nuestro código. Si nos mantenemos alejados de esos errores, reducimos en gran medida nuestra propia probabilidad de problemas.
Los objetos de patrón son seguros para subprocesos, pero el método 'compile()' podría no serlo.Hubo dos o tres errores a lo largo de los años que provocaron la falla de la compilación en entornos multiproceso. Yo recomendaría hacer la compilación en un bloque sincronizado. –
Sí, se han producido errores de concurrencia en la clase Patrón, y se agradecen sus consejos de acceso sincronizado. Sin embargo, los desarrolladores originales de la clase Pattern pretendían hacer que la clase Pattern fuera segura para el hilo, y ese es el contrato en el que cualquier programador Java debería poder confiar. Para ser sincero, preferiría tener variables locales de hilos y aceptar el golpe de rendimiento mínimo que confiar en el comportamiento seguro de subprocesos por contrato (a menos que haya visto el código). Como dicen "Enhebrar es fácil, la sincronización correcta es difícil". –
Tenga en cuenta que la fuente de "Patrón" está en la distribución de Oracle JDK (Según http://www.oracle.com/technetwork/java/faq-141681.html#A14: "El SDK de Java 2, Standard Edition en sí mismo contiene un archivo llamado src.zip que contiene el código fuente de las clases públicas en el paquete java ") para que uno pueda echar un rápido vistazo. –