Question

J'utilise ArrayList statique dans une classe pour stocker des informations sur les champs de base de données non modifiables. Je prévois de l'initialiser dans le constructeur une fois (appel de la méthode init gardée par le constructeur du verrou). Après que plusieurs threads vérifient si arraylist contient un champ. Dois-je contrôler cet accès en lecture de quelque manière que ce soit? Par exemple, en appelant ArrayList.Synchronized.

Était-ce utile?

La solution

Non (et vous ne devriez pas avoir besoin de le faire lorsque vous le créez tant que vous le faites dans le constructeur static, qui a un verrou implicite multithread - si vous n'êtes pas en mesure de le faire, vous voudrez probablement le verrouiller). Il existe un ReaderWriterLockSlim si vous pouvez utiliser pour contrôler l’accès si vous devez malgré tout avoir besoin d’un accès en lecture / écriture.

Autres conseils

Non. La synchronisation n’est requise que pour les objets avec état dans lesquels vous allez changer d’état.

Non, tant que vous lisez, vous pouvez simplement vous en occuper.

Non, mais envisagez de l'envelopper dans un ReadOnlyCollection . pour vous assurer qu'aucun des threads ne peut le modifier.

Modifier: Cependant, pour ce faire, vous devez définir la liste List<T> plutôt que ArrayList.

Pour la création initiale de votre liste, vous pouvez envisager d'utiliser un constructeur statique. Cela ne sera appelé qu'une seule fois lors de la première référence au type.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top