Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Jeg har kigget en del her på siden. Men jeg synes ikke rigtig at få noget ud af det. Men jeg har da fundet ud af Disky og CarstenKnudsen ikke er helt enige på dette område.
Det kommer helt an på opgavens art og størrelse. I baggrunden er både ArrayList og Vector implementeret som et Object[]. Ellers kan man overveje at bruge HashTable, (Hash)Map, LinkedList osv..
Min konklusion: * forskellen er under 10% på nyere JVM's * forskellen er ligegyldig i langt de fleste situationer (en forskel på 1 sekund for 10 millioner adds og 100 millioners gets er ikke ret meget)
Ja, men skal der ikke stå System.out.println("Vector: " + (t2 - t1)); og ikke System.out.println("ArrayList : " + (t2 - t1)); nederst i din kode? Bare en bemærkning.
Det betyder at hvis du har 2 tråde som skal opdatere samtidigt, så kan du med en Vector bare lade dem gøre det og det vil altid virke korrekt, mens med en ArrayList skal du selv synchronize adgangen eller vil det en gang imellem gå galt.
Det jeg mener er at du kan jo ikke på præcis samme tid opdater to tråde på en alm. maskine. Så der må ligesom være en eller anden grund til at det kan opstå. Kunne så forestille mig at det var i forbindelse med context skift... eller?
Nej problemet opstår i forbindelse med ikke atomiske operationer.
Hvis jeg må have lov til at komme med et lidt andet eksempel, som vi har "hygget" os en del med i det firma jeg arbejder for.
ObjectOutputStream og writeObject !
Den er heller ikke thread safe. Og hvis man kører multi threaded (også på en 1 CPU maskine) så skal man selv synchronize på den ObjectOutputStream socket. Ellers går det galt.
Problemet er at writeObject ikke er atomisk.
Der der kan ske er:
tråd 1: oos.writeObject(a);
tråd 2: oos.writeObject(b);
fordi writeObject ikke er atomisk, så kan der ske det at JVM'en faktisk gør følgende:
tråd 1 udskriver første halvdel af object a bytene tråd 2 udskriver første halvdel af object b bytene tråd 1 udskriver sidste halvdel af object a bytene tråd 2 udskriver sidste halvdel af object b bytene
Og jeg kan afsløre at en ObjectInputStream readObject ikke kan finde ud af det !
Jeps. Har dog pt. kun et par tråde. Men det er jo ikke til at vide hvad der kommer af udbygninger. Det kan godt være at det er at tage sorgerne på forskud, men synchronized er jo nem at bruge. Det ville være surt hvis man løber ind i problemet og sidder og vrider hovedet med hvad det kunne være, når det er så let at forebygge :o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.