Frage

Ich verwende statische Arraylist in einer Klasse Informationen über nicht-aktualisierbaren Datenbankfelder zu speichern. Ich bin die Planung es einmal (nach Sperre in Konstruktor bewacht init Methodenaufruf) in Konstruktor zu initialisieren. Nach, dass mehrere Threads überprüfen, ob Arraylist ein Feld enthält. Muss ich diese Lesezugriff steuern in irgendeiner Weise? Zum Beispiel durch ArrayList.Synchronized Aufruf.

War es hilfreich?

Lösung

Nein (und Sie sollen nicht brauchen, wenn es entweder so lange zu schaffen, wie Sie es in dem static Konstruktor tun, , die eine implizite Multi-Thread-Sperre hat - wenn Sie nicht in der Lage sind, das zu tun, werden Sie wahrscheinlich sperren). Es gibt eine ReaderWriterLockSlim wenn Sie verwenden können, den Zugang zu kontrollieren, wenn Sie aber zu R / W-Zugang benötigen Sie enden.

Andere Tipps

Nein. Die Synchronisation wird nur für Stateful-Objekte erforderlich, wenn Ihr den Zustand gehen zu ändern.

Nein, solange Sie lesen Sie gerade an ihm haben.

Nein, sollen aber in einem ReadOnlyCollection Einwickeln zu machen sicher, dass keiner der Fäden kann es ändern.

Edit:. Allerdings, dies zu tun, müssen Sie die Liste einen List<T> eher als ein ArrayList machen

Für die erste Erstellung Ihrer Liste könnte man erwägen, einen statischen Konstruktor. Dies wird nur einmal auf dem ersten Hinweis auf die Art aufgerufen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top