paneles example create java inheritance synchronized

example - ¿Está sincronizado heredado en Java?



table swing java (3)

No, siempre tendrá que escribir synchronized . Si llama al método sincronizado de la súper clase, esta será, por supuesto, una llamada sincronizada. synchronized no es parte de la firma del método.

Consulte http://gee.cs.oswego.edu/dl/cpj/mechanics.html para obtener una descripción detallada de Doug Lea, Java threading boss (más o menos).

Tengo superclase Point y un método synchronized draw() . ¿Las subclases de Point heredarán synchronized si anulo el método draw() en ellas o tengo que escribirlas siempre?


Puede verificarlo usted mismo escribiendo esto:

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; } }

Y clase de prueba

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 } }

En mi máquina era 137099 en lugar de 200000.


su método Overriden ya no se sincronizará si lo reemplaza y elimina el synchronized . Lo encontré here y here