Interface SynchronizationManager<T>

Type Parameters:
T -
All Known Implementing Classes:
DebuggingSynchronizationManager, SynchronizationManagerImpl

public interface SynchronizationManager<T>
Objekt, das Synchronisierungen auf Elemente vom generischen Typ T verwaltet.

Ein Nutzer dieser Klasse kann entweder Lese- oder Schreibzugriff auf ein Element vom Typ K anfordern und erhält dann ein Schlüssel-Objekt. Nach Abschluss der Operation muss das Schlüsselobjekt freigegeben werden, damit weitere Nutzer auf das Element zugreifen können.

Diese Klasse verwaltet alle vergebenen Schlüssel und erlaubt für Debug-Zwecke z. B. die vergebenen Schlüssel auszugeben.

Der konkrete Typ von K sollte equals und hashCode performant und sinnvoll implementieren.

Zurückgegebene SyncKey-Objekte sind an einen Thread gebunden und dürfen nicht von einem Thread an einen aderen weitergegeben werden. Sie sollten nur innerhalb von try-with-resources-Blöcken genutzt werden. Beispiel:


 try(var key = syncManager.acquireWriteKey(someID)) {
	 // Mache etwas, das key benötigt
 }
 
  • Method Summary

    Modifier and Type
    Method
    Description
    acquireWriteKey(T element)
    Fordert exklusiven Zugriff (Schreibzugriff) auf das angegebene Element an.
    acquireWriteKey(T element, Duration timeout)
    Fordert exklusiven Zugriff (Schreibzugriff) auf das angegebene Element an.
    com.google.common.collect.SetMultimap<T,SyncKey<T>>
    Gibt alle aktuell angeforderten Schlüssel zurück.
  • Method Details

    • acquireWriteKey

      @NotNull SyncKey<T> acquireWriteKey(T element) throws SynchronizationFailedException
      Fordert exklusiven Zugriff (Schreibzugriff) auf das angegebene Element an. Ein Schreibzugriff darf nur angefordert werden, wenn dieser Thread noch keinen Lesezugriff besitzt. Ansonsten würde dies Deadlocks verursachen. Sollte dieser Thread bereits einen Schreibzugriff besitzen ist das jedoch kein Problem.
      Parameters:
      element - Element
      Returns:
      Schlüssel zum Zugriff auf das Element. Solange der Schlüssel gültig ist, garantiert diese Klasse, kann kein anderer Thread einen anderen Schlüssel auf dieses Element hält.
      Throws:
      SynchronizationFailedException - Falls der Schlüssel nicht geholt werden konnte (z. B. interrupted beim warten auf Schlüssel)
    • acquireWriteKey

      @NotNull SyncKey<T> acquireWriteKey(T element, Duration timeout) throws SynchronizationFailedException
      Fordert exklusiven Zugriff (Schreibzugriff) auf das angegebene Element an. Ein Schreibzugriff darf nur angefordert werden, wenn dieser Thread noch keinen Lesezugriff besitzt. Ansonsten würde dies Deadlocks verursachen. Sollte dieser Thread bereits einen Schreibzugriff besitzen ist das jedoch kein Problem.
      Parameters:
      element - Element
      timeout - maximale Wartezeit zur synchronisierung
      Returns:
      Schlüssel zum Zugriff auf das Element. Solange der Schlüssel gültig ist, garantiert diese Klasse, kann kein anderer Thread einen anderen Schlüssel auf dieses Element hält.
      Throws:
      SynchronizationFailedException - Falls der Schlüssel nicht geholt werden konnte (z. B. timeout oder interrupted beim warten auf Schlüssel)
    • getLocks

      com.google.common.collect.SetMultimap<T,SyncKey<T>> getLocks()
      Gibt alle aktuell angeforderten Schlüssel zurück. Diese Funktion existiert nur zum Debugging bzw. zur Fehleranalyse um z. B. bei Deadlocks den Zustand ausgeben zu können.
      Returns:
      alle aktuell angeforderten Schlüssel