有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

假设我有一个单例类(任何类都可以获得该实例):

class data
{
      Color sun = "WHITE";
      String luminance = "HIGH";
      int age = 25;
      double speed = 52.5
      ...
}

假设我有几个线程可以引用这个类的Singleton实例。我正试图找到一种方法,在每个字段的基础上同步get/set

如果我对每个变量都有一个同步的getter/setter方法,那么这将基本上“锁定”整个类(而不是单个字段),直到该方法被设置为止

有没有办法让这些线程只锁定实例值,而不是锁定整个类

--编辑:我为庞大的单对象数据道歉

数据实际上存储在几个类中。每个对象最多只有20-25个成员


共 (1) 个答案

  1. # 1 楼答案

    If I have a synchronized getter/setter method for each variable, then this will basically "lock" the whole class(instead of the individual field) until that method is set.

    不,它会锁定整个物体,但这可能就是你的意思

    data has 1000+ variables ...

    选项1

    如果你有足够的内存,你可以简单地拥有一个Object[] locks = new Object[1000];,你可以为它获取锁

    public void setColor(Color newCol) {
        synchronized (locks[17]) {
            sun = newCol;
        }
    }
    

    选项2

    另一个选项是将所有字段标记为volatile。这将至少确保读取和写入是原子执行的

    选项3

    看看AtomicLongAtomicReferenceAtomicBoolean。。。等等在^{} package