加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 23:55:10 所属栏目:Java 来源:网络整理
导读:我用户sun jdk 1.5 ThreadPoolExecutor(24,24,60,TimeUnit.SECONDS,new LinkedBlockingQueue()). soemtime我使用jdb工具查找线程池中所有线程的状态是“在监视器中等待”,代码是: String key = getKey(dt.getPrefix(),id); synchronized (key.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进行同步是一种不好的做法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读