让我们说我有这个课程:
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同时执行。
我认为答案是肯定的,但只是为了确定我是否遗漏了一些细微之处。
答案 0 :(得分:1)
是。其他线程可以执行不标记为已同步的功能。
所以,在你的情况下:
没有两个线程可以同时执行getField2
和setField2
。但getField1()
可以与getField2
或setField2
答案 1 :(得分:1)
对于getField1
,它可以由2个线程同时执行,无需任何等待和同步。因为你没有任何setter,并且它的值在对象实例化时被初始化,所以脏读也没有变化。
对于getField2
和setField2
,没有2个线程,并且对SharedObject
的同一个实例同时执行这些方法。
希望这有帮助!!!