并发读取只读字段并写入共享对象中的 read/write 字段

Concurrent reads from read only fields and writes in read/write fields in a shared object

假设我有这个 class:

public SharedObject {
  private int readOnlyField;
  private int readWriteField;

  public SharedObject(int field1, int field2) {
    this.readOnlyField = field1;
    this.readWriteField = field2;
  }

  public getField1() {...}

  public synchronized getField2() {...}

  public synchronized setField2(...) {...}
}

我可以让多个线程同时使用这 3 个方法吗?

显然我可以使用最后 2 个同步方法,但我不确定 getField1() 是否可以与其他 2 个同时执行。

我认为答案是肯定的,但只是为了确定我是否遗漏了一些细微之处。

是的。其他线程可以执行未 标记为同步的函数

因此,在您的情况下:

没有两个线程可以同时执行 getField2setField2。但是 getField1() 可以与 getField2setField2

同时执行

对于getField1它可以由2个线程同时执行,无需任何等待和同步。并且由于您没有任何 setter,并且它的值是在对象实例化时初始化的,所以脏读也没有变化。

对于getField2setField2,没有2个线程并且同时对SharedObject的同一个实例执行这些方法。

希望对您有所帮助!!!