This is an interesting affront to Google, who so far is only supporting programming languages for grown ups on App Engine. Much like an Englishman debating an American, Google is trying to keep the level of discourse high and sophisticated. Our American Microsoft, on the other hand, has just sucker-punched the Englishman in the mouth and yelled “YEAH WHERE’S YOUR VOCABULARY NOW?”

There are lots of reasons it doesn’t work. The first couple of reasons we’ll describe are more obvious. After understanding those, you may be tempted to try to devise a way to “fix” the double-checked locking idiom. Your fixes will not work: there are more subtle reasons why your fix won’t work. Understand those reasons, come up with a better fix, and it still won’t work, because there are even more subtle reasons.

Lots of very smart people have spent lots of time looking at this. There is no way to make it work without requiring each thread that accesses the helper object to perform synchronization.