De nye ArrayList og HashMap er ikke synchronized men kan wrappes som tjp forklarer.
Men det er meget vigtigt at forstaa at synchronized ikke betyder thread safe.
Synchronized beskytter den interne data struktur ved enkelt metode kald fra forskellige traade.
al.add("A") og al.add("B") i to forskellige traade vil med synchronized altid resultere i at der tilfoejes 2 elementer (i en eller anden raekkefoelge). Med usynchronized kan man risikere kun at faa tilfoejet 0 eller 1 elementer i nogle scenarier hvor et eller begge kald gaar i gang med at flytte rundt paa data fordi arrayet skal udvides.
Men ofte har man flere forskellige metode kald som haenger sammen. Og saa er synchronized ikke nok til at goere koden thread safe.
Selvom konti faktisk peger paa en synchronized map implementation, saa er koden ikke thread safe.
Synchronized sikrer kun mod at to traade kaldet set samtidigt og smadrer den bagvedliggende datastruktur.
Selv med synchronized kan to traade sagtens checke at der er penge paa kontoen samtidigt og saa bagefter begge traekke beloebet fra og faa kontoen i negativ.
Og i saa tilfaelde er det unoedvendigt at map implementationen er thread safe.
I den virkelige verden er det forholdsvis sjaeldent at en synchronized implementation er nok.
Derfor skiftede man fra synchronized til unsynchronized som det normale i Java 1.2.
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.