Introduction
Yesterday I was talking to a good friend in the park and the topic of double checked locking for lazy instantiating of singletons came up. (Why we talked about this on a nice sunny day in the park is a separate issue, which won't be addressed in the blog ;)) At the time I was sure it was broken but I couldn't explain the reasons behind this strange behaviour. So I decided to have a look at it and write a quick blog about it.
How does double check locking look like in Java:
public class DoubleCheckedLocking { private static DoubleCheckedLocking singleton; private final String a; private final String b; private DoubleCheckedLocking() { this.a = "A"; this.b = "B"; } public DoubleCheckedLocking getSingleton() { if(singleton == null) { //1 synchronized(this) { //2 if(singleton == null) { //3 singleton = new DoubleCheckedLocking(); //4 } } } return singleton; //5 } }The idea behind this pattern is that you want to lazy initialise your singleton but you want to avoid the performance penalty which comes from declaring the whole method
synchronized
. In the pattern the first thread would enter the method in line 1 and check that the singleton is null
. It would then synchronize on the objects internal lock on line 2 and do a null
check on the value of the singleton again on line 3. If the null check holds true the singleton will be initialised on line 5 finally. All further calls to the getSingleton method wouldn't see the singleton variable as null and would just return the cached instance.
Unfortunately this pattern is not thread-safe and is considered broken. What could possibly go wrong in this situation? The problem sits on line 4. Assigning a reference to a variable and running the constructor is not an atomic operation. Two things need to happen:
- Run the constructor
- Assign newly created instance to variable (singleton)
What can you do?
The easiest way to fix this is to not use lazy instantiation at all or synchronize the whole method.
What if you must have the use lazy loading and can't synchronize the whole method? You can also declare the variable
public class ThreadSafeLoading { private static final ThreadSafeLoading singleton = new ThreadSafeLoading(); public ThreadSafeLoading getSingleton() { return singleton; } }This works very well. The code to initiate a static variable runs during classloading time and before the class can be instantiated. The variable is declared final so it is ensured that all clients calling
getSingleton
will refer to the same instance of the class.
What if you must have the use lazy loading and can't synchronize the whole method? You can also declare the variable
singleton
as volatile. That way the JVM will bring memory barriers in place which will stop the possibility for out-of-order processing. Each write to volatile variable and each read from a volatile variable will create memory barrier and ensure that two threads will see actions in the other thread in proper order.public class DoubleCheckedLocking {
private static volatile DoubleCheckedLocking singleton;
private final String a;
private final String b;
private DoubleCheckedLocking() {
this.a = "A";
this.b = "B";
}
public DoubleCheckedLocking getSingleton() {
if(singleton == null) { //1
synchronized(this) { //2
if(singleton == null) { //3
singleton = new DoubleCheckedLocking(); //4
}
}
}
return singleton; //5
}
}
Excellent Post
ReplyDeleteYaaron Studios is one of the rapidly growing editing studios in Hyderabad. We are the best Video Editing services in Hyderabad. We provides best graphic works like logo reveals, corporate presentation Etc. And also we gives the best Outdoor/Indoor shoots and Ad Making services.
video editors studio in hyderabad
short film editors in hyderabad
corporate video editing studio in hyderabad
ad making company in hyderabad
Nice Blog... Thanks for sharing... by Ece Projects in Chennai
ReplyDeleteThanks for Sharing this useful blog...
ReplyDeletematlab project centers in chennai
Good!!! by IOT Training in Chennai
ReplyDeleteNice Blog!!! Thanks for Sharing this Blog!!!
ReplyDeleteCotton Sarees in Surat
Wholesale Designer Sarees manufactures in surat
Thank you for excellent article.You made an article that is interesting.
ReplyDeleteInformatica online job support from India|Informatica project support from India ,AWS online job support from India|AWS project support from India|ETL Testing online job support from India|ETL Testing project support from India||Pega online job support from India|Pega project support from India|Pentaho online job support from India|Pentaho project support from India|Python online job support from India|Python project support from India
Keep on the good work and write more article like this...
Awesome Blog...It's very Useful for me!!! Thanks!!!
ReplyDeletePython Projects in Chennai
Python Project Centers in Chennai
Bigdata Projects in Chennai
Bigdata Project Centers in Chennai
android training in chennai
ReplyDeleteweb design training in chennai
web development training in chennai
seo training in chennai
digital marketing training in chennai
The Best Project Centers in Chennai
ReplyDeleteIeee 2019 Cloud Computing projects
Ieee 2019 Data Mining projects
Ieee 2019 Mobile Computing projects
Ieee 2019 Big data projects
Ieee 2019 Hadoop projects
eee project centers in chennai,engineering project centers in chennai,matlab project centers in chennai,embedded project centers in chennai
ReplyDeletebest ieee projects centre in chennai at affordable price
Visit :- http://ieeeprojectcentre.in/
Phone : +91 97518 00789 / +91 77081 50152
ReplyDeletems project centers in chennai Top Foundation ms project centers in Chennai, gives you a total (both fundamental and propelled) level of MS Task Preparing with life extension and venture the executive's ideas.
who provides Graphic services, web designing services, logo design services, graphic design
ReplyDeleteand all kind of website design,Graphic services.
graphic designer in delhi
freelance graphic designer in delhi
freelance graphic designer in delhi ncr
freelance graphic designer in noida
freelance logo designer in delhi
freelance logo designer in delhi ncr
freelance web designer in delhi ncr
freelance website designer in delhi ncr
freelance designer in delhi
freelance website designer in delhi
freelance web designer in delhi
freelance graphic designer services in delhi
freelancer graphic designer services in delhi ncr
freelancer graphic designer services in delhi
freelancer graphic services in delhi ncr
freelancer logo services in delhi
freelancer logo services in delhi ncr
freelancer web designer services in delhi ncr
freelancer web designer services in delhi
freelance web designer services in delhi
freelance website designer services in delhi
freelance website designer services in delhi ncr
freelance logo designer service in delhi
freelance logo designer service in delhi ncr
logo designer in delhi
brochure design in delhi
logo design in delhi
freelance logo design in delhi
freelance logo designer in gurgaon
freelance logo designer in noida
ReplyDeleterealtime project centers in chennai, college project centers in chennai, me project centers in chennai, mini project centers in chennai, matlab project centers in chennai It will likewise develop your insight and pragmatic involvement with different innovation and allow you to consider specific choice modules. ATS inserted frameworks mentors are implanted guaranteed specialists and experienced working experts with hand on ongoing Embedded framework venture information.
vidmate
ReplyDeleteThanks for posting
ReplyDeletemy webside techwolk.in/Sonsindiasong
I have Webside techwolk.in/Sonsindiasong for Related by All type Songs.
Also check for
Deletejava training in coimbatore
python training in coimbatore
Woow, Great information shared. I appreciate the persistence you put into your website and detailed information you provided.
ReplyDeleteAndroid app development
iOS App Development
mallumv
ReplyDeletetamilmv Tamil movie download 2021
Madras rockers
movieswood movie download
Very nice blog
ReplyDeleteinternship request letter | Internship completion letter | internship companies | internship resume objective | internship application letter | Internship with training | internship email | internship experience | What internship means | Internship acknowledgement
Henrik Eichenhardt'S Blog: Why Double Checked Locking Is Broken? >>>>> Download Now
ReplyDelete>>>>> Download Full
Henrik Eichenhardt'S Blog: Why Double Checked Locking Is Broken? >>>>> Download LINK
>>>>> Download Now
Henrik Eichenhardt'S Blog: Why Double Checked Locking Is Broken? >>>>> Download Full
>>>>> Download LINK Vq
Henrik Eichenhardt'S Blog: Why Double Checked Locking Is Broken? >>>>> Download Now
ReplyDelete>>>>> Download Full
Henrik Eichenhardt'S Blog: Why Double Checked Locking Is Broken? >>>>> Download LINK
>>>>> Download Now
Henrik Eichenhardt'S Blog: Why Double Checked Locking Is Broken? >>>>> Download Full
>>>>> Download LINK Cu
Good blog post
ReplyDeletehow to get job in canada for indian
Average Salary in Canada
CRS Calculator
Best immigration consultant in Delhi
Canada Point system
Grate blog. It's very interesting to read...
ReplyDeleteR Programming course at Edukators in Coimbatore