DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
public class RecordHeader implements Header {
private ByteBuffer keyBuffer;
- private String key;
- private ByteBuffer valueBuffer;
- private byte[] value;
...
public String key() {
if (key == null) {
key = Utils.utf8(keyBuffer, keyBuffer.remaining());
keyBuffer = null;
}
return key;
}
public byte[] value() {
if (value == null && valueBuffer != null) {
value = Utils.toArray(valueBuffer);
valueBuffer = null;
}
return value;
} |
After
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
public class RecordHeader implements Header { private ByteBuffer keyBuffer; private + private volatile String key; + private volatile ByteBuffer valueBuffer; + private volatile byte[] value; ... public String key() { if (key == null) { + synchronized (this) { + if (key == null) { key = Utils.utf8(keyBuffer, keyBuffer.remaining()); keyBuffer = null; + } + } } return key; } public byte[] value() { if (value == null && valueBuffer != null) { + synchronized (this) { + if (value == null && valueBuffer != null) { value = Utils.toArray(valueBuffer); valueBuffer = null; + } + } } return value; } } |
JMH Benchmark: Double-Checked Locking vs. Full-Method Synchronization
...