我用户 sun jdk 1.5 ThreadPoolExecutor(24, 24,60,TimeUnit.SECONDS, new LinkedBlockingQueue())。soemtime 我使用 jdb 工具查找线程池中所有线程的状态是“在监视器中等待”,代码是:
String key = getKey(dt.getPrefix(), id);
synchronized (key.intern()) { ----->
“同步(key.intern())”有问题吗?
我使用 jdb 工具得到以下信息,24 个线程的状态是“在监视器中等待”,这意味着 24 个线程在“key.intern()”处死锁。
(java.lang.Thread)0x28 pool-3-thread-2 在监视器中等待
(java.lang.Thread)0x27 pool-3-thread-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() 方法可能会死锁,好吗?