Pregunta

Teniendo en cuenta este código:

public class Messager implements Runnable {            

  public static void main(String[] args) {   
      new Thread(new Messager("Wallace")).start();    
      new Thread(new Messager("Gromit")).start();             
  }             
  private String name;                 
  public Messager(String name) { this.name = name; }             
  public void run() {    
      message(1); message(2);    
  }           
  private synchronized void message(int n) {    
    System.out.print(name + "-" + n + " ");    
  }    
}

Yo entiendo que la palabra clave synchronized hace dependiente de la rosca de bloqueo del objeto. Preguntas:

A) es el bloqueo puesto en libertad tan pronto como el método marcado como acabados synchronized? O tan pronto como método run() del subproceso termina b) ¿Puedo asegurar que cualquiera de los hilos imprimirá su nombre y 1 2 antes que el otro?

¿Fue útil?

Solución

A. Si. Salga al mercado tan pronto como la función synchronized termina.
B. Sí. Puede, pero si quería hacerlo, ¿por qué escribir código multiproceso en el primer lugar? synchronized garantiza la atomicidad, no nada respecto a la orden, pero se puede imponer el orden por la espera de una bandera para cambiar. De todos modos, lo que está tratando de hacer cumplir es secuencialidad . Usted consigue esto de forma gratuita en entornos de un único subproceso:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top