我希望弄清楚Java中synchronized的性能影响。我有几个简单的类:
public class ClassOne {
private ClassTwo classTwo = new ClassTwo();
public synchronized void setClassTwo(int val1, int val2) {
classTwo.setVal(val1);
classTwo.setVal2(val2);
}
public static void main(String[] args) {
ClassOne classOne = new ClassOne();
classOne.setClassTwo(10, 100);
}
}
public class ClassTwo {
private int val;
private int val2;
public synchronized void setVal(int val) {
this.val = val;
}
public synchronized void setVal2(int val2) {
this.val2 = val2;
}
}
因此,正如您在前面的示例中所看到的,我正在对ClassOne.setClassTwo和ClassTwo.setVal以及ClassTwo.setVal2进行同步。 我想知道的是,如果我删除ClassTwo.setVal和ClassTwo.setVal2上的同步,是否会完全相同的性能,就像这样:
public class ClassTwo {
private int val;
private int val2;
public void setVal(int val) {
this.val = val;
}
public void setVal2(int val2) {
this.val2 = val2;
}
}
在这种情况下(假设没有其他类使用这些类),它们在功能上是等效的,但想知道有多少额外开销(如果有)会出现在更多同步操作中。
public synchronized void setClassTwo
- 你实际上正在同步class1
的一个实例。setVal()
和setVal2()
上的synchronized
关键字是必要的,以确保除运行setClassTwo()
的线程之外的其他线程不会更新ClassTwo实例的值。 在setVal()
上进行同步会锁定* ClassTwo *。 - TheLostMind