¿Son seguros los hilos de java.lang.Class?

Bajo IBM JVM, hemos enfrentado un problema cuando varios subprocesos intentan llamar a Class.getAnnotation al mismo tiempo en diferentes objetos (pero con la misma anotación). Los subprocesos comienzan a llegar a un punto muerto en espera en un monitor dentro de una tabla hash, que se utiliza como caché para anotaciones en IBM JVM. Lo más extraño es que el subproceso que contiene este monitor se pone en estado de 'espera en condición' dentro de Hashtable.get, haciendo que todos los otros subprocesos esperen indefinidamente.

El soporte de IBM declaró que la implementación de Class.getAnnotation no es segura para subprocesos.

En comparación con otras implementaciones de JVM (por ejemplo, OpenJDK), vemos que implementan métodos de clase de manera segura para subprocesos. IBM JVM es una JVM de código cerrado, publican algún código fuente junto con su JVM, pero no es suficiente para hacer un juicio claro cada vez que su implementación de Class es segura o no.

La documentación de la Clase no establece claramente cada vez que sus métodos son seguros para subprocesos o no. Entonces, ¿es una suposición segura tratar los métodos de clase (getAnnotation en particular) como un subproceso seguro o debemos usar bloques de sincronización en un entorno de subprocesos múltiples?

¿Cómo los marcos populares (por ejemplo, Hibernate) están mitigando este problema? No hemos encontrado ningún uso de sincronización en el código de Hibernate que estaba usando el método getAnnotation.

Respuestas a la pregunta(2)

Su respuesta a la pregunta