Tentando entender o funcionamento do bloco sincronizado

0 respostas
E

Olá !!!

Galera, me ajudem a exclarecer algumas dúvidas.

1- Gera algum problema se o método “notify” for chamado antes do método “wait” ?

Se a resposta acima for sim:
1- Dependendo da máquina virtual, a Thread “Main” pode obter o sincronismo do objeto “sa” e, consequentemente, ela irá chamar o método “notify” antes que a Thread “t1” chame o método “wait” ?

De acordo com alguns livros que andei estudando, não tem como, dependendo da máquina virtual, saber se a Thread “Main” irá ou não obter o bloqueio do objeto “sa”.

Me ajudem se eu estiver falando bobeira. :wink:


class B {
  private static String[] sa = new String[]{"Not Done","X","Y","Z"};
  public static void main (String[] args) {      
    Thread t1 = new A(sa); 
    t1.start();
    synchronized (sa) {        
      sa[0] = "Done";
      sa[1] = "A"; 
      sa[2] = "B"; 
      sa[3] = "C";
      sa.notify();
}}}
class A extends Thread {
   private String[] sa = new String[]{"Not Done","X","Y","Z"};
   public A(String[] sa) {  this.sa = sa;  }
   public void run() {
         synchronized (sa) {
            while (!sa[0].equals("Done")) {
                try {
                    sa.wait();
                 } 
                catch (InterruptedException ie) {}
             }
          }
      System.out.print(sa[1] + sa[2] + sa[3]);
}}

Obrigado pela atenção

Criado 21 de setembro de 2007
Respostas 0
Participantes 1