mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 22:51:17 +07:00
27 lines
957 B
HTML
27 lines
957 B
HTML
<html>
|
|
<body>
|
|
Reports <a href="https://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html">double-checked locking</a>.
|
|
<p>
|
|
Double-checked locking tries to initialize a field on demand and in a thread-safe manner, while avoiding the cost of synchronization.
|
|
Unfortunately it is not thread-safe when used on a field that is not declared <code>volatile</code>.
|
|
When using Java 1.4 or earlier, double-checked locking doesn't work even with a <code>volatile</code> field.
|
|
Read the article linked above for a detailed explanation of the problem.
|
|
</p>
|
|
<p>Example of incorrect double-checked locking:</p>
|
|
<pre><code>
|
|
class Foo {
|
|
private Helper helper = null;
|
|
public Helper getHelper() {
|
|
if (helper == null)
|
|
synchronized(this) {
|
|
if (helper == null) helper = new Helper();
|
|
}
|
|
return helper;
|
|
}
|
|
}
|
|
// other functions and members...
|
|
}
|
|
</code></pre>
|
|
<!-- tooltip end -->
|
|
</body>
|
|
</html> |