gpt4 book ai didi

java - 为什么 TimeZone.getTimeZone(id) 是同步的,为什么没有记录?

转载 作者:搜寻专家 更新时间:2023-10-30 19:43:51 24 4
gpt4 key购买 nike

java.util.TimeZone.getTimeZone(id)是一种根据 id 获取时区的方法。当我使用这个类时,我用反编译器打开它并注意到它是同步的。由于它是 static,这意味着没有两个线程可以同时调用该方法。如果多个线程(例如在 Web 应用程序中)经常获取时区,这可能会非常痛苦。为什么一定要同步?

然后我意识到文档没有说明任何关于同步的内容。所以,我的反编译器可能是错误的。然后我打开the source ,并且是同步的。为什么没有记录在案?我知道 javadoc 不包含 synchronized 关键字,但它可能已被提及。

解决办法当然是使用joda-time DateTimeZone

最佳答案

该方法最终可以实际创建一个 TimeZone(按照代码向下)并将其添加到 Map。我猜每个人都认为这不是您应该经常调用的方法,因此选择了简单的方法。

我很难想出一个合理的案例来争论这个synchronized。无竞争的同步(即使是在非常高性能的情况下,这是我经常处理的事情)像芯片一样便宜。

要获得竞争,您不仅需要多个线程,还需要多个同时访问这个特定代码块 的线程。如果在这种情况下您确实遇到了问题,您可以轻松地将自己的缓存保存在 ConcurrentHashMap 中,或者保存在完全未锁定的结构中。

至于为什么没有记录 - 同步是实现的一个属性。欢迎您实现不执行此同步的替代库。 JDK 文档记录了 Java 库,而不是(大部分)Sunacle 的实现。

关于java - 为什么 TimeZone.getTimeZone(id) 是同步的,为什么没有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5682236/

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