[java] - synchronizacja wątków

0

przypuśćmy, że mamy następujący kod:

public void metoda(Klasa obiektKlasy)
{
  .....
  synchronized(obiektKlasy)
  {
     .....
  }
} 

kilka wątków wywołuje tę metodę przekazując jako argument dany obiekt. Moje pytanie jest następujące... wiadome jest to, że jeżeli kilka wątków wywoła tę metodę i przekaże jako argument ten sam obiekt to nastąpi blokada... natomiast czy również nastąpi blokada jeżeli kilka wątków wywoła tę metodę, ale przekaże różne instancje klasy Klasa? chodzi mi to, żeby wątki nie przeszkadzały sobie, jeżeli przekażą jako argument różne instancje klasy Klasa.

0

Synchronizacja którą pokazałeś polega na rezerwacji monitora konkretnego OBIEKTU. Jeśli dwa wątki zrobią synchronized() na różnych obiektach to nic się nie stanie (typ tych obiektów nie gra w tym wypadku żadnej roli).

0

tzn. rozumiem, że jeżeli mamy taki kod:

..... 
public void metoda(KlasaBardzoFajna obiektKlasy)
{
  .....
  synchronized(obiektKlasy)
  {
     .....
  }
}
.....

i jeden watek wywoła metodę w następujący sposób:

metoda(new KlasaBardzoFajna("obiekt 1");

a drugi

metoda(new KlasaBardzoFajna("obiekt 2");

to rozumiem, że wątki nie będą sobie wzajemnie przeszkadzać. ponieważ w metodzie obiektKlasy będzie referencją do dwóch różnych obiektów.

0

Tak, ale w takim przypadku ta synchronizacja nie ma większego sensu. Synchronizacja jest potrzebna właśnie wtedy kiedy wątki pracują na tym samym obiekcie. I nie traktował bym jej jako "przeszkadzania" tylko jak zabezpieczenie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1