¿Por qué es el bloque sincronizado mejor que el método sincronizado?

He comenzado a aprender la sincronización en subprocesos.

Método sincronizado:

public class Counter{

  private static int count = 0;

  public static synchronized int getCount(){
    return count;
  }

  public synchronized setCount(int count){
     this.count = count;
  }

}

Bloque sincronizado:

public class Singleton{

private static volatile Singleton _instance;

public static Singleton getInstance(){
   if(_instance == null){
            synchronized(Singleton.class){
              if(_instance == null)
              _instance = new Singleton();
            }
   }
   return _instance;
}

¿Cuándo debo usar el método sincronizado y el bloque sincronizado? ¿Por qué es el bloque sincronizado mejor que el método sincronizado?

Respuestas a la pregunta(9)

Su respuesta a la pregunta