gpt4 book ai didi

java - 同步死锁(String intern())

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:39 24 4
gpt4 key购买 nike

我使用 sun jdk 1.5 ThreadPoolExecutor( 24, 24,60,TimeUnit.SECONDS, new LinkedBlockingQueue())。 soemtime我用jdb工具发现线程池中所有线程的状态都是“waiting in a monitor”,代码是:

    String key = getKey(dt.getPrefix(), id);
synchronized (key.intern()) { ----->

“synchronized (key.intern())”有问题吗?


我使用 jdb 工具得到以下信息,24 个线程的状态是“waiting in a monitor”,这意味着 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?

我学到的是:使用内部字符串进行同步是一种不好的做法。

关于java - 同步死锁(String intern()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/348985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com