Java >> Java tutorial >  >> Tag >> volatile

Hvorfor er flygtige søgeord ikke tilladt for lokale variabler?

Lokale variabler lever på stakken; og selvfølgelig, når du påberåber dig det samme metode to gange, de har alle deres lokale variabler på deres individuelle stakke.

flygtig giver kun mening, når flere tråde ville skrive til den samme hukommelsesplacering (på bunken).

Hvilket giver absolut ingen mening for lokale variabler fra en metodes krop!


Og endelig garanterer initialiseringssikkerhed.

Ikke på lokale variabler:det stopper dig bare med at omtildele den variabel.

final CountDownLatch latch = new CountDownLatch(3);

Vil ovenstående kode garantere initialisering, så låsen er perfekt synlig for koden nedenfor, dvs.

Nej. Det er denne kode, der garanterer det:

public static class ProcessThread implements Runnable {

    final CountDownLatch latch;

    // Plus the assignment in the constructor.

}

final felter er garanteret synlige, når konstruktøren er færdig (normalt). Fra JLS Sec 17.5:

Et objekt anses for at være fuldstændig initialiseret, når dets konstruktør er færdig. En tråd, der kun kan se en reference til et objekt, efter at objektet er blevet fuldstændig initialiseret, vil garanteret se de korrekt initialiserede værdier for objektets final felter.


Java tag