title: ConcurrentHashMap non-blocking reads and memory visibility issue
body: <p><code>ConcurrentHashMap</code> in Java offers reads to proceed concurrently with updates. The trade-off in this is that the results of the read is limited to reflect only the <em>last completed</em> update when the reading  began, so it is not specified to reflect the latest state of elements.</p>
  <p>However AFAIK Java Memory Model , without some form of synchronization between the read and write threads, the updates of the write thread may not become visible to the read thread , even after arbitrary period of time.</p>
  <p>Given the read threads do not block with write threads , what forms the basis of the guarantee of visibility of <em>the last completed update</em> to be available to the read thread ?</p>
  <p>I could only think of something on the lines of Compare-and-swap algorithm at play but I could not verify it in the source code of that library.</p>