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

Hvordan implementerer man flygtigt søgeord i Java?

Java er en programmering, der er velsignet med masser af funktioner. I denne artikel vil vi udforske en sådan funktion, der er flygtigt søgeord i Java. Følgende tips vil blive dækket i denne artikel,

  • Volatilt søgeord
  • Forskellen mellem synkronisering og flygtigt søgeord
  • Eksempel

Går videre med denne artikel om flygtigt søgeord i Java.

Et flygtigt nøgleord bruges til at ændre værdien af ​​en variabel med forskellige tråde. Det bruges også til at gøre klasser trådsikre. Det betyder, at flere tråde kan bruge en metode og instans af klasserne på samme tid uden problemer. Det flygtige søgeord kan bruges enten med primitiv type eller objekter.

Eksempel

class Test
{
static int var=5;
}

I ovenstående eksempel, antag, at to tråde arbejder på samme klasse. Begge tråde kører på forskellige processorer, hvor hver tråd har sin lokale kopi af var. Hvis en tråd ændrer sin værdi, vil ændringen ikke afspejles i den originale i hovedhukommelsen. Det fører til datainkonsistens, fordi den anden tråd ikke er opmærksom på den ændrede værdi.

class Test
{
static volatile int var =5;
}

I ovenstående eksempel er statiske variabler klassemedlemmer, der er delt mellem alle objekter. Der er kun én kopi i hovedhukommelsen. Værdien af ​​en flygtig variabel vil aldrig blive gemt i cachen. Al læsning og skrivning vil blive udført fra og til hovedhukommelsen.

Fortsæt med denne artikel om flygtige søgeord i Java.

Forskel mellem synkronisering og flygtige søgeord

Volatilt søgeord er ikke en erstatning for synkroniseret søgeord, men det kan bruges som et alternativ i visse tilfælde. Der er følgende forskelle:

Flygtigt søgeord Synkroniseringssøgeord
Flygtigt søgeord er en feltmodifikator. Synkroniseret søgeord ændrer kodeblokke og metoder.
Tråden kan ikke blokeres for at vente i tilfælde af flygtig. Tråde kan blokeres for at vente i tilfælde af synkronisering.
Det forbedrer trådens ydeevne. Synkroniserede metoder forringer trådens ydeevne.
Den synkroniserer værdien af ​​én variabel ad gangen mellem trådhukommelse og hovedhukommelse. Den synkroniserer værdien af ​​alle variabler mellem trådhukommelse og hovedhukommelse.
Uflygtige felter er ikke underlagt compileroptimering. Synkronisering er underlagt compileroptimering.

Går videre med denne artikel om flygtigt søgeord i Java.

Eksempel:

public class VolatileTest {
private static final Logger LOGGER = MyLoggerFactory.getSimplestLogger();
private static volatile int MY_INT = 0;
public static void main(String[] args) {
new ChangeListener().start();
new ChangeMaker().start();
}
static class ChangeListener extends Thread {
@Override
public void run() {
int local_value = MY_INT;
while ( local_value < 5){
if( local_value!= MY_INT){
LOGGER.log(Level.INFO,"Got Change for MY_INT : {0}", MY_INT);
local_value= MY_INT;
}
}
}
}
static class ChangeMaker extends Thread{
@Override
public void run() {
int local_value = MY_INT;
while (MY_INT <5){
LOGGER.log(Level.INFO, "Incrementing MY_INT to {0}", local_value+1);
MY_INT = ++local_value;
try {
Thread.sleep(500);
} catch (InterruptedException e) { e.printStackTrace(); }
}
}
}
}

Sådan er vi nået til slutningen af ​​denne artikel om 'Volatile søgeord i Java'. Hvis du ønsker at lære mere, så tjek Java Training by Edureka, en betroet online læringsvirksomhed. Edurekas Java J2EE- og SOA-trænings- og certificeringskursus er designet til at træne dig til både kerne- og avancerede Java-koncepter sammen med forskellige Java-frameworks som Hibernate &Spring.

Har du et spørgsmål til os? Nævn det i kommentarfeltet på denne blog, så vender vi tilbage til dig så hurtigt som muligt.


Java tag