Tuesday, August 21, 2012

What is volatile variable in Java - When to use

What is Volatile variable in Java
volatile variable in Java is a special variable which is used to signal threads, compiler that this particular variables values is going to be updated by multiple thread inside Java application. By making a variable volatile using volatile keyword in Java, application programmer ensures that its value should always been read from main memory and thread should not used cached value of that variable from there own stack. With the introduction of Java memory model from Java 5 onwards along with introduction of CountDownLatch, CyclicBarrier, Semaphore and ConcurrentHashMap, volatile variable also guarantees "happens-before" relationship, which means not only other thread has visibility of latest value of volatile variable but also all the variable seen by the thread which has updated value of volatile variable before this threads sees it. What is volatile variable and when to use it is always a popular Java threading question.



Important point related to volatile keyword in Java
Since volatile keyword is used to make any variable volatile in Java environment, its good to know more about What is volatile keyword, what is its limitation and How to use volatile keyword in Java.
What is volatile variable in Java and when to use it
1) Volatile keyword can only be applied to variable, it can not be applied to class or method. using volatile keyword along with class and method is compiler error.

2) volatile is also refereed as modifier in Java.


When to use Volatile variable in Java
This is the most important thing to learn while learning about volatile variable in Java. When to use volatile variable in Java is also a famous multi-threading interview question in Java. here are some of the scenario where you can use volatile variable in Java :

1) Any variable which is shared between multiple threads should be made variable, in order to ensure that all thread must see latest value of volatile variable.

2) A signal to compiler and JIT to ensure that compiler does not change ordering or volatile variable and moves them out of synchronized context.

3) You want to save cost of synchronization as volatile variables are less expensive than synchronization.

That's all on What is volatile variable in Java, When to use volatile variable in Java. volatile variable is an important concept to understand and use. Its also very important in terms of  Java interview point of view.



Other tutorial on Java from this blog
Top thread interview question for Java programmer - Beginners
Top Java coding interview question for Senior Java programmer

2 comments:

  1. Hello there, Can you please write about difference between volatile variable in Java 1.4 and Java 5? I heard there are some changes made on How volatile variable works to fix the double checked locking problem, love to see an english explanation.

    ReplyDelete
  2. What is meaning of happens-before guarantee provided by volatile variable in Java? How they achieve synchronization and how strong that is?

    ReplyDelete

Java67 Headline Animator