synchronisation zwischen threads



  • hi,

    wie kann man in java eine variable die in beiden threads benutzt wird synchronisieren? macht man es oft wie im folgenden code gezeigt? kann hierbei etwas unerwartetes passieren?

    class foo
    {
       public int var = 1;
       public Object lock1 = new Object();
    
       private void set_var()
       {
          synchronized (lock1)
          {
            var1 = 0; 
          }
       }   
    }
    
    class mythread
    {
      public foo foo_reference;
    
      private void set_var()
       {
          synchronized (foo_reference.lock1)
          {
            foo_reference.var1 = 2; 
          }
       } 
    }
    

    cu



  • Merke: Public Attributes are evil.
    Wenn du schon eine set_var() hast, wieso benutzt du die Methode nicht?

    class foo
    {
        private int var = 1;
    
        synchronized public void set_var(int var)
        {
            this.var = var;
        }
    }
    
    class mythread
    {
        private foo foo_reference;
    
        private void set_var()
        {
            foo_reference.set_var(10);
        }
    }
    

    Btw, eine synchronized Methode ist das gleiche wie:

    public void  set_var(int var)
    {
        synchronized (this) {
            this.var = var;
        }
    }
    

Anmelden zum Antworten