[英]Java Concurrency: Shared Memory Between Threads
假设我有一个Singleton类(任何类都可以获取实例):
class data
{
Color sun = "WHITE";
String luminance = "HIGH";
int age = 25;
double speed = 52.5
...
}
假设我有几个线程来获取对此类的Singleton实例的引用。 我试图找出一种在PER FIELD基础上同步获取/设置的方法。
如果我为每个变量都有一个synchronized getter / setter方法,那么这将基本上“锁定”整个类(而不是单个字段),直到设置该方法。
有没有办法使这些线程只锁定实例值而不是锁定整个类?
- 编辑:我为巨大的一个对象数据道歉。
数据实际上存储在几个类中。 每个对象最多只有20-25个成员。
如果我为每个变量都有一个synchronized getter / setter方法,那么这将基本上“锁定”整个类(而不是单个字段),直到设置该方法。
好吧,不。 它将锁定整个对象,但这可能就是你的意思了......
数据有1000多个变量......
选项1
如果你有足够的内存,你可以简单地拥有一个Object[] locks = new Object[1000];
为此获得锁定。
public void setColor(Color newCol) {
synchronized (locks[17]) {
sun = newCol;
}
}
选项2
另一种选择可能是将所有字段标记为volatile
。 这至少可以确保以原子方式执行读写操作。
选项3
看一下java.util.concurrent.atomic
包中的AtomicLong
, AtomicReference
, AtomicBoolean
,...等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.