Synchronizacja każdego elementu z listy osobno

Synchronizacja każdego elementu z listy osobno
VA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 16
0
Kopiuj
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ć?

Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1912
1

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

MrMadMatt
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 373
0

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

piotrpo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3303
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ą?

damianem
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 205
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:

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.