dúvida sobre Thread

Olá !!!

De acordo com o seguinte código:


public class Filho implements Runnable {
static int a = 0;
public void run ( ) {
soma();
}

public void soma(){
synchronized(Filho.class) {
a=a+1;
System.out.println(a +" C= "+ Thread.currentThread().getName());
}
}

public static void main ( String args[]) {
new Thread (new Filho()).start();
new Thread (new Filho()).start();
new Thread (new Filho()).start();
}
}


qual é a diferença entre os seguintes métodos ?


método 1:

public void soma(){
synchronized(Filho.class) {
a=a+1;
System.out.println(a +" CT= "+ Thread.currentThread().getName());
}
}


método 2:

public synchronized void soma(){
a=a+1;
System.out.println(a +" CT= "+ Thread.currentThread().getName());
}


Obrigado pela atenção !!!