【问题标题】:Multiple threads get value of x variable but only one thread can change the value of x variable at a time多个线程获取 x 变量的值,但一次只有一个线程可以更改 x 变量的值
【发布时间】:2011-02-13 04:57:56
【问题描述】:

在Java中,我有一个全局变量x,我应该用什么来让多个线程一次获取x的值,但一次只能有一个线程改变x变量的值?

有什么例子吗? 谢谢。

【问题讨论】:

  • 只是不要在其他线程中为x 赋值...

标签: java multithreading


【解决方案1】:

如果您想允许多个并发读取,那么您将需要使用ReadWriteLockReentrantReadWriteLock 类实现该特定接口)来保护访问。

【讨论】:

  • simple Lock(或ReentrantLock,如果你认为不应该避免)应该在大多数情况下使用(我会说在所有情况下),即使你有很多并发读取以及来自单线程的罕见写入。 (更多信息在这里)[stackoverflow.com/questions/4659295/….这是一个讨论为什么shared_mutex(Java ReadWriteLock 的模拟)被 C++ 标准委员会拒绝。注意事项与语言无关。
【解决方案2】:

在这种情况下,您应该能够使用java.util.concurrent.atomic 中的类。这些类是允许无锁访问的单个值的容器。如果您不需要比较和交换操作,只要您至少使用 java 1.5,就可以使用 volatile 字段。

【讨论】:

  • 取决于变量的类型。
【解决方案3】:

您可以使用 ReadWriteLock 来实现这一点。 Java java.util.concurrent.locks 包提供了不同类型的锁。您可以使用此包中的 ReentrantReadWriteLock。代码示例可以在 javadoc 中找到。

如果全局变量是基本数据类型,java.util.concurrent.atomic包中的AtomicLong、AtomicInt等应该也能解决用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 2021-04-09
    • 2016-11-30
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    相关资源
    最近更新 更多