
Volatile
A variable declared with the volatile keyword guarantees that any thread reading the field will see the most recently written value.
Volatile variable value will be directly written to and read from the main memory instead of CPU cache.
In Java, the volatile keyword is used to indicate
that a variable's value will be modified by different threads. Declaring a
variable as volatile ensures
that any read or write operation on that variable will be directly performed on
the main memory, rather than using a local copy (cache). This guarantees
visibility of changes across threads.
public class VolatileTest
{
private boolean flag = false;
public void writer() {
flag =
true;
}
public void reader() {
if (flag) {
System.out.println("Flag is
true");
}
else {
System.out.println("Flag is
false");
}
}
public static void main(String[] args) throws InterruptedException
{
VolatileTest sharedData = new VolatileTest();
Thread writerThread = new Thread(() -> {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
sharedData.writer();
});
Thread readerThread = new Thread(() -> {
sharedData.reader();
});
writerThread.start();
readerThread.start();
}
}
Flag is false
public class VolatileTest {
private volatile boolean flag = false;
public void writer() {
flag = true;
}
public void reader() {
if (flag) {
System.out.println("Flag is true");
}
else {
System.out.println("Flag is false");
}
}
public static void main(String[] args) throws InterruptedException {
VolatileTest sharedData = new VolatileTest();
Thread writerThread = new Thread(() -> {
sharedData.writer();
});
Thread readerThread = new Thread(() -> {
sharedData.reader();
});
writerThread.start();
readerThread.start();
}
}
Flag is true





