Я пользователь sun jdk 1.5 ThreadPoolExecutor (24, 24,60, TimeUnit.SECONDS, новый LinkedBlockingQueue ()). Так вот, я использую инструмент jdb, чтобы найти состояние всех потоков в пуле потоков, «ожидающих на мониторе», код:
String key = getKey(dt.getPrefix(), id);
synchronized (key.intern()) { ----->
Есть ли проблема в "synchronized (key.intern ())"?
Я получаю следующую информацию, используя инструмент jdb, 24 потока находятся в состоянии ожидания на мониторе, это означает, что 24 потока зашли в тупик при key.intern ().
(java.lang.Thread) 0x28 пул-3-нить-2, ожидающий в мониторе
(java.lang.Thread) 0x27 пул-3-нить-3, ожидающий в мониторе
(java.lang.Thread) 0x1b pool-3-thread-4, ожидающий в мониторе
(java.lang.Thread) 0x1a pool-3-thread-5, ожидающий на мониторе
(java.lang.Thread) 0x19 pool-3-thread-6, ожидающий на мониторе
(java.lang.Thread) 0x18 pool-3-thread-7, ожидающий в мониторе
(java.lang.Thread) 0x17 pool-3-thread-8, ожидающий в мониторе
...
так что результат: в многопоточной среде метод Sting intern () может быть тупиковым, хорошо?