<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:12px"><div id="yui_3_16_0_1_1419505425514_67007" dir="ltr">Can someone explain why using Unsafe's monitor methods are substantially worse than synchronized? I had expected them to emit equivalent monitorEnter/monitorExit instructions and have similar performance.</div><div id="yui_3_16_0_1_1419505425514_67007" dir="ltr"><br></div><div id="yui_3_16_0_1_1419505425514_67007" dir="ltr">My use case is to support a bulk version of CHM#computeIfAbsent, where a single mapping function returns the result for computing multiple entries. I had hoped to bulk lock, insert the unfilled entries, compute, populate, and bulk unlock. An overlapping write would be blocked due to requiring an entry's lock for mutation. I had thought that using Unsafe would allow for achieving this without the memory overhead of a ReentrantLock/AQS per entry, since the synchronized keyword is not flexible enough to provide this structure.</div><div id="yui_3_16_0_1_1419505425514_67007" dir="ltr"><br></div><div id="yui_3_16_0_1_1419505425514_67007" dir="ltr">Thanks,</div><div id="yui_3_16_0_1_1419505425514_67007" dir="ltr">Ben</div><div id="yui_3_16_0_1_1419505425514_67007" dir="ltr"><br></div><div class="" id="yui_3_16_0_1_1419505425514_67029" style="">Benchmark                                                    Mode  Samples         Score         Error  Units</div><div class="" id="yui_3_16_0_1_1419505425514_67029" style="">c.g.b.c.SynchronizedBenchmark.monitor_contention            thrpt       10   3694951.630 ±   34340.707  ops/s</div><div class="" id="yui_3_16_0_1_1419505425514_67029" style="">c.g.b.c.SynchronizedBenchmark.monitor_noContention          thrpt       10   8274097.911 ±  164356.363  ops/s</div><div class="" id="yui_3_16_0_1_1419505425514_67029" style="">c.g.b.c.SynchronizedBenchmark.reentrantLock_contention      thrpt       10  31668532.247 ±  740850.955  ops/s</div><div class="" id="yui_3_16_0_1_1419505425514_67029" style="">c.g.b.c.SynchronizedBenchmark.reentrantLock_noContention    thrpt       10  41380163.703 ± 2270103.507  ops/s</div><div class="" id="yui_3_16_0_1_1419505425514_67029" style="">c.g.b.c.SynchronizedBenchmark.synchronized_contention       thrpt       10  22905995.761 ±  117868.968  ops/s</div><div class="" id="yui_3_16_0_1_1419505425514_67029" style="">c.g.b.c.SynchronizedBenchmark.synchronized_noContention     thrpt       10  44891601.915 ± 1458775.665  ops/s</div><div class="" style="" id="yui_3_16_0_1_1419505425514_72021"><br class="" style=""></div></div></body></html>