当前位置:  开发笔记 > 编程语言 > 正文

同步死锁(String intern())

如何解决《同步死锁(Stringintern())》经验,为你挑选了1个好方法。

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



1> matt b..:

我曾经发过一个相关的问题,你可能想看一下:在String对象上同步的问题?

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


如果你在答案中快速解释原因而不是让人们阅读一个长问题,那将是一个更好的答案.
如果您详细说明为什么这样做是不好的做法,那将对您有很大帮助。
推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有