gpt4 book ai didi

Java 线程优化

转载 作者:搜寻专家 更新时间:2023-11-01 03:00:18 26 4
gpt4 key购买 nike

我在 Java 中使用自定义类 Foo 作为 HashMap 中的键类型。 Foo 实例的所有字段都是不可变的(它们被声明为 final 和 private,并且仅在构造函数中赋值)。因此,给定 Foo 对象的 hashCode() 也是固定的,为了优化目的,我在构造函数中计算它并简单地在 中返回该值>hashCode() 方法。

Foo 的实例也有一个 value() 方法,该方法在对象被实例化后返回一个类似的固定值。目前我也是在构造函数中计算,在方法中返回,但是hashCode()value()的区别是:hashCode() 在对象创建后几乎立即第一次被调用,但是 value() 被调用得晚得多。我知道,由于同步问题,使用单独的线程来计算哈希码只会增加运行时间,但是:

  • 这是计算value() 的好方法吗?它会改善运行时间吗?
  • 简单的 Threads 就足够了,还是我需要使用池等?

注意:这似乎是我在优化程序的错误部分,但我已经处理了“正确”的部分,并将平均运行时间从 ~17 降低了秒到~2秒。 编辑:将有超过 5000 个 Foo 对象,这是一个保守的估计。

最佳答案

听起来延迟计算绝对是一种不错的方法 - 是的,如果您创建了很多这样的对象,线程池就是可行的方法。

至于 value() 准备就绪之前的返回值,我会远离返回无效值,而是让它阻塞(并添加一些 isValueReady() 帮助器)或让它立即返回一个“ future ”——一些对象提供相同的 isReady 和一个阻塞的 get 方法。

此外,永远不要依赖“很久以后”——在使用它之前始终确保那里的值已经准备就绪。

关于Java 线程优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36666942/

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