Synchronizacja każdego elementu z listy osobno

0
val lista = listOf("1", "2", "3")

fun metoda1() {
   lista.withLock {
      ....
   }
}

fun metoda2() {
   lista.withLock {
      ....
   }
}

fun metoda3() {}
fun metoda4() {}

itd...

Każda z powyższych metod działa na osobnym wątku. lista zawiera n obiektów, z których każdy może być użyty tylko przez 1 wątek. Chcę osiągnąć coś takiego, że funkcje będą czekać, aż zwolni się dostęp do jakiegoś obiektu z listy.

Jak to najlepiej zrobić?

1

Nic z tego nie rozumiem, chodzi o https://www.baeldung.com/java-blocking-queue ?

0

Jak to na studia to pewnie chodzi o to aby napisać metodę List<String> getData() i dodać do jej deklaracji słówko synchronized.

0

Trochę ciężko zrozumieć o co ci chodzi. Chcesz mieć listę jakichś obiektów, gdzie wątek blokuje cały obiekt, wykonuje na obiekcie coś, po czym zwalnia go i wtedy następny wątek może się odwołać do tego obiektu ze swoją robotą?

0

Zakładając, że lista jest skonstruowana przed startem wątków i jej zawartość się nie zmienia, wystarczy synchronizować się na poszczególnych obiektach z tej listy, czyli:

void method(int elementIndex) {
  var element = list.get(elementIndex);
  synchronized (element) {
    // do stuff
  }
}

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