java – synchronized上的死锁(String intern())

前端之家收集整理的这篇文章主要介绍了java – synchronized上的死锁(String intern())前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
用户sun jdk 1.5 ThreadPoolExecutor(24,24,60,TimeUnit.SECONDS,new LinkedBlockingQueue()). soemtime我使用jdb工具查找线程池中所有线程的状态是“在监视器中等待”,代码是:
String key = getKey(dt.getPrefix(),id);
    synchronized (key.intern()) {      ----->

“synchronized(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()方法可能会死锁,好吗?

解决方法

我曾经发过一个相关的问题,你可能想看一下: Problem with synchronizing on String objects?

我学到的是:使用intern’ed Strings进行同步是一种不好的做法.

猜你在找的Java相关文章