Yo usuario sun jdk 1.5 ThreadPoolExecutor (24, 24,60, TimeUnit.SECONDS, LinkedBlockingQueue()). soemtime herramienta jdb que utilizo para encontrar el estado de todas las discusiones en grupo de subprocesos están "esperando en un monitor", el código es:interbloqueo en sincronizado (Interno de cadena())
String key = getKey(dt.getPrefix(), id);
synchronized (key.intern()) { ----->
¿Hay un problema en "sincronizado (key.intern())"?
consigo siguiente informatnio usando la herramienta jdb, el estado de 24 hilos está "esperando en un monitor", significa 24 hilos son de interbloqueo en "key.intern()".
(java.lang.Thread) 0x28 piscina-3-thread-2 esperando en un monitor
(java.lang.Thread) 0x27 piscina-3-thread-3 esperando en un monitor
(java.lang.Thread) 0x1b piscina-3-thread-4 esperando en un monitor
(java.lang.Thread) 0x1a piscina-3-thread-5 esperando en un monitor
(java.lang .Thread) 0x19 pool-3-thread-6 esperando en un monitor
(java.lang.Thread) 0x18 piscina-3-thread-7 espera en un monitor
(java.lang.Thread) 0x17 piscina-3-thread-8 de espera en un monitor ...
por lo que el resultado es: en el entorno de múltiples hilos, el método Sting Intern() puede ser un interbloqueo, ¿de acuerdo?
Primera pregunta es ¿qué quieres lograr? ¿Cuál es el problema? ¿Por qué necesitas sincronizar? –
¿ha mirado los hilos FUERA del subproceso para ver si también están esperando en un monitor? Deberías prestar atención al objeto exacto en el que cada hilo está sincronizado también. –
Hay dos subprocesos fuera del grupo de subprocesos que están esperando en un monitor, y también supervisan la misma línea (key.intern()). – user44230