Infos für mehrere Threads

Hallo!
Ich habe folgendes Problem:

Die Informationen einer INI Datei sollen mehreren Threads zur Verfügung stehen.
Die Datei selbst soll zu Beginn der Applikation einmal gelesen werden.
Um dies zu realisieren sind mir zwei Varianten eingefallen:

Es wird einmal das Objekt ini erstellt, das bei der Konstruktion die INI Datei einliest und in Variablen schreibt. Jedem Thread wird das Objekt als Parameter (bzw. als Referenz) mit übergeben. Dadurch können die Threads auf die Daten zugreifen. Methoden des INI-Objekt s - falls es welche gibt - , müssten dann synchronisiert sein, da alle Threads auf das gleiche Objekt zugreifen und es sonst zu Fehlern kommen könnte.

Zu beginn wird das Objekt ini erstellt, das bei der Konstruktion die INI Daten einliest und in Klassenvariablen (!) schreibt. Jeder Thread erstellt sein eigene Instanz der ini – Klasse, hat also sein eigenes INI Objekt, wobei alle auf die gleichen static Variablen zugreifen. Methoden des INI-Objekt - falls es welche gibt -, müssten dann nicht (!) synchronisiert sein, da jeder Thread auf seine eigene Instanz der Methode zugreift, aber dennoch die gleichen Variablen benutzt.

Sehe ich das soweit richtig?
Welche der beiden Methoden, falls beide funktionieren ist die Sinnvollere, z.B. vom Gesichtpunkt des Speicherverbrauchs.

Oder gibt’s einen noch besseren Weg?

Die Variablen werden also einmal eingelesen und nicht mehr verändert? Dann ist eigentlich sowieso keine Synchronisierung nötig. Die erste Lösung würde ich persönlich nehmen.

Moin,

Methoden des INI-Objekt s - falls es welche gibt -
, müssten dann synchronisiert sein, da alle Threads auf das
gleiche Objekt zugreifen und es sonst zu Fehlern kommen
könnte.

Nur, wenn Du schreibend zugreifen willst.

Methoden des INI-Objekt - falls es welche gibt -, müssten
dann nicht (!) synchronisiert sein

Das sehe ich anders. Die Synchronisation wird nicht wegen eines Sprachelements nötig, sondern weil logisch Fehler auftreten können, wenn zwei Parteien gleichzeitig schreiben.

Welche der beiden Methoden, falls beide funktionieren ist die
Sinnvollere

Der zweite Weg wirkt ziemlich unpraktisch auf mich.

z.B. vom Gesichtpunkt des Speicherverbrauchs.
Das würde ich außer Acht lassen.

Oder gibt’s einen noch besseren Weg?

Ein Singleton. Dabei erstellst Du eine Klasse InitValues mit protected Konstruktor und der Methode
public InitValues getInstance();
Die Methode gibt dann die einzige Instanz der Klasse an (die wird ggf. neu angelegt), die die gesuchten Daten in Feldern enthält.
Das ist immer noch nicht threadsafe, darum mußt Du Dich ggf. selbst kümmern.

Thorsten