Isso ocorre porque são 2 threads diferentes, cada uma está chamando o seu método. Para realizar o seu teste, você deve criar uma classe com o método synchronized e compartilhar uma instancia desse objeto em 2 threads que invocaram o método sincronizado.
Como o Laubstein falou, para a sincronização ocorrer, as duas threads teriam que estar no mesmo pingpong, como no código abaixo:
[code]public class PingPong implements Runnable{
public static void main(String[] args) {
PingPong onlyOne = new PingPong();
new Thread(onlyOne).start();
new Thread(onlyOne).start();
}
synchronized void hit(long n) {
for(int i = 1 ;i<3;i++) {
System.out.println(n + "-" + i + " ");
}
}
@Override
public void run() {
hit(Thread.currentThread().getId());
}
}
[/code]
Não há nada que impeça duas threads diferentes de acessar objetos diferentes. A sincronização está em locais diferentes, e as variáveis desses objetos se referem a locais de memórias diferentes, portanto, não constituem uma região crítica.