gpt4 book ai didi

java - 如何使用静态变量和线程提高 Java 性能?

转载 作者:搜寻专家 更新时间:2023-11-01 02:32:53 24 4
gpt4 key购买 nike

为了不深入探讨我的软件应该做什么,让我举一个我试图解决的例子,让这个简短而有趣。

假设我有一个名为 X 的基类和该类的一个实现,我将调用 Y。自然地,Y 类扩展了 X 基类。假设我有 20 个对象将通过单独的线程实例化 Y 类对于每个对象和每个实例化,一个大文件都会加载到内存中。其中一些对象可能需要使用不同的文件,但为了简单起见,假设它们都需要访问同一个文件。

有没有办法在基类中定义一个静态指向这些文件的特定对象(变量),这样,即使实现类通过 20 个不同的线程加载了 20 次,它们都可以共享同一个静态对象,这样文件只需要加载一次???

提前感谢您的帮助...

最佳答案

  1. 那个文件是只读的吗?
  2. 这是一串大数据吗?

如果是这样,一个 String 就让它成为一个 protected static final String 并且它是线程安全的。如果它是可变的,那么您的 future 将遭受整个世界的伤害。

如果它是一个二进制文件并且只能以只读方式使用,你可以用 byte[] 代替 String 做同样的事情并确保你不让任何东西改变数组中的字节。更好的方法是以只读方式实现一些 StreamReader 接口(interface)。

使线程安全的最简单和最安全的方法是使其不可变。 final 关键字使引用不可变,但不会使其指向的对象不可变。由于 String 是不可变的,因此 final 也使引用不可变,您就可以开始了。如果您需要在所有线程之间共享更改的可变性,java.util.concurrent 包将是您的 friend 。

如果您将变量设置为 protected static final,则子类的所有实例,无论它们在哪个执行线程上,都将看到数据。

关于java - 如何使用静态变量和线程提高 Java 性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5035704/

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