Car*_*ndo 3 java concurrency singleton
假设我有一个Singleton类(任何类都可以获取实例):
class data
{
Color sun = "WHITE";
String luminance = "HIGH";
int age = 25;
double speed = 52.5
...
}
Run Code Online (Sandbox Code Playgroud)
假设我有几个线程来获取对此类的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;
}
}
Run Code Online (Sandbox Code Playgroud)
选项2
另一种选择可能是将所有字段标记为volatile.这至少可以确保以原子方式执行读写操作.
选项3
看一看AtomicLong,AtomicReference,AtomicBoolean,...等的java.util.concurrent.atomic包装.