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

时间:2015-06-11 12:06:27

标签: java multithreading synchronization

让我们说我有这个课程:

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(...) {...}
}

我可以同时使用这三种方法的多个线程吗?

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

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

2 个答案:

答案 0 :(得分:1)

是。其他线程可以执行不标记为已同步的功能。

所以,在你的情况下:

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

同时执行

答案 1 :(得分:1)

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

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

希望这有帮助!!!