vector, synchronized und mehrere methoden
-
hallo zusammen,
ich bin gerade dabei ein programm in java zu realisieren, bei dem es einen vector existiert, in dem so ziemlich alle daten gespeichert werden.
diesen vector habe ich ein eine separate klasse gepackt und verschiedene methoden zum schreiben in den vector, lesen aus den vector und suchen im vector implementiert.
nur bin ich mir jetzt nicht ganz sicher, das meine gedanken zur sicherstellung der zugriffe richtig ist. denn ich muss 100% sicherstellen, das nicht zwei von diesen methoden gleichzeitig auf diesen vector zugreifen können. nun bin ich einfach mal hingegangen und habe alle methode mit synchronized definiert.
aber wenn ich mir das jetzt so recht überlege, weis ich nicht recht, ob das ausreicht.denn wenn suchfunktionen zum beipsiel den vector durchsuchen, ist das ja nur eine anreihung von get methoden des vectors. diese sind zwar schon von der definition der vector-klasse synchronizert, aber reicht das ???
um die suche zu realisieren, habe ich eine for-scheife definiert, die abbricht, wenn i vec.size() erreicht hat. das ist ja noch alles ok. nun ist es aber theoretisch möglich, das von einem anderem object die methode zum hinzufügen eines element zu dem vector aufgerufen wird, solange der vector noch durchsucht wird und schon stimmt doch die größe des ermittelten vec.size() nicht mehr und die suchfunktion stimmt nicht mehr.kann ich irgendwie sicherstellen, das nur eine methode der klasse aktiv aufgerufen werden kann oder gibt es da vielleicht noch eine ganz andere möglichkeit dafür???
für jede hilfe bei diesem problem bin ich sehr dankbar...
-
klaus dieter schrieb:
nur bin ich mir jetzt nicht ganz sicher, das meine gedanken zur sicherstellung der zugriffe richtig ist. denn ich muss 100% sicherstellen, das nicht zwei von diesen methoden gleichzeitig auf diesen vector zugreifen können. nun bin ich einfach mal hingegangen und habe alle methode mit synchronized definiert.
aber wenn ich mir das jetzt so recht überlege, weis ich nicht recht, ob das ausreicht.Das sollte reichen, es sei denn, es gibt Situationen, in denen Du sicherstellen musst, dass der Vector nicht zwischen zwei Methodenaufrufen (Deiner Klasse, nicht des Vectors!) geaendert wird.
denn wenn suchfunktionen zum beipsiel den vector durchsuchen, ist das ja nur eine anreihung von get methoden des vectors. diese sind zwar schon von der definition der vector-klasse synchronizert, aber reicht das ???
Das reicht natuerlich nicht, wie Du schon festgestellt hast.
Wenn Du aber eh die Synchronisation selber vornimmst, brauchst Du gar keinen Vector, ArrayList leistet dann das gleiche.