【发布时间】:2011-02-13 04:57:56
【问题描述】:
在Java中,我有一个全局变量x,我应该用什么来让多个线程一次获取x的值,但一次只能有一个线程改变x变量的值?
有什么例子吗? 谢谢。
【问题讨论】:
-
只是不要在其他线程中为
x赋值...
标签: java multithreading
在Java中,我有一个全局变量x,我应该用什么来让多个线程一次获取x的值,但一次只能有一个线程改变x变量的值?
有什么例子吗? 谢谢。
【问题讨论】:
x 赋值...
标签: java multithreading
如果您想允许多个并发读取,那么您将需要使用ReadWriteLock(ReentrantReadWriteLock 类实现该特定接口)来保护访问。
【讨论】:
Lock(或ReentrantLock,如果你认为不应该避免)应该在大多数情况下使用(我会说在所有情况下),即使你有很多并发读取以及来自单线程的罕见写入。 (更多信息在这里)[stackoverflow.com/questions/4659295/….这是一个讨论为什么shared_mutex(Java ReadWriteLock 的模拟)被 C++ 标准委员会拒绝。注意事项与语言无关。
在这种情况下,您应该能够使用java.util.concurrent.atomic 中的类。这些类是允许无锁访问的单个值的容器。如果您不需要比较和交换操作,只要您至少使用 java 1.5,就可以使用 volatile 字段。
【讨论】:
您可以使用 ReadWriteLock 来实现这一点。 Java java.util.concurrent.locks 包提供了不同类型的锁。您可以使用此包中的 ReentrantReadWriteLock。代码示例可以在 javadoc 中找到。
如果全局变量是基本数据类型,java.util.concurrent.atomic包中的AtomicLong、AtomicInt等应该也能解决用例。
【讨论】: