同步在 Java 中是继承的吗?
2022-09-01 09:50:59
我有超类和方法。如果我在其中重写方法,继承的子类会不会,或者我必须总是写它?Point
synchronized
draw()
Point
synchronized
draw()
我有超类和方法。如果我在其中重写方法,继承的子类会不会,或者我必须总是写它?Point
synchronized
draw()
Point
synchronized
draw()
不,您将始终必须编写 .如果您调用超类的同步方法,这当然是一个同步调用。 不是方法签名的一部分。synchronized
synchronized
有关 Java 线程主管 Doug Lea(左右)的详细说明,请参阅 http://gee.cs.oswego.edu/dl/cpj/mechanics.html。
你可以通过写这个来自己检查它:
public class Shape {
protected int sum = 0;
public synchronized void add(int x) {
sum += x;
}
}
public class Point extends Shape{
public void add(int x) {
sum += x;
}
public int getSum() {
return sum;
}
}
和测试类
public class TestShapes {
public final static int ITERATIONS = 100000;
public static void main(String[] args) throws InterruptedException {
final Point p = new Point();
Thread t1 = new Thread(){
@Override
public void run() {
for(int i=0; i< ITERATIONS; i++){
p.add(1);
}
}
};
Thread t2 = new Thread(){
@Override
public void run() {
for(int i=0; i< ITERATIONS; i++){
p.add(1);
}
}
};
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(p.getSum()); // should equal 200000
}
}
在我的机器上,它是137099而不是200000。