繁体   English   中英

Java并发:线程之间的共享内存

[英]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中的AtomicLongAtomicReferenceAtomicBoolean ,...等等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM