<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body style="background-color: rgb(255, 255, 255); color: rgb(0, 0,
    0);" text="#000000" bgcolor="#FFFFFF">
    <br>
    <div class="moz-cite-prefix">On 11/11/2014 07:58 PM, David Chase
      wrote:<br>
    </div>
    <blockquote
      cite="mid:1D96462F-87D3-4794-A818-27DD2EE10046@oracle.com"
      type="cite"><!--[if !IE]><DIV style="border-left: 2px solid #009900; border-right: 2px solid #009900;  padding: 0px 15px; margin: 2px 0px;"><![endif]-->
      <pre wrap="">Iíve incorporated your other changes (not yet the linear-scan hash table) and will be retesting.
One thing I wonder about for both hash table and binary search is if the first try should be attempted with no lock to avoid the overhead of synchronization; I expect that looking will be more common than interning, which in turn will be (vastly) more common than class redefinition.</pre>
      <!--[if !IE]></DIV><![endif]--></blockquote>
    <br>
    Hi David,<br>
    <br>
    Yes, that's why I implemented the hash table in a way where lookups
    are lock-free. Binary-search would be trickier to implement without
    locking, but maybe not impossible. Surely not with
    Arrays.binarySearch() but perhaps with a separate implementation.
    The problem with Arrays.binarySearch is that it returns an index. By
    the time you retrieve the element at that index, it can already
    move. I'm also not sure that "careful" concurrent insertion of new
    element would not break the correctness of binary search. But there
    is another way I showed before: using StampedLock. It is a kind of
    optimistic/pessimistic read-write lock. Its beauty is in that
    optimistic read part is almost free (just a volatile read at start
    and a readFence followed by another volatile read at the end). You
    just have to be sure that the algorithm guarded by an optimistic
    read lock terminates normally (that it doesn't spin in an endless
    loop or throw exceptions) in the presence of arbitrary concurrent
    modifications of looked-up state. Well, binary search is such an
    algorithm.<br>
    <br>
    Regards, Peter<br>
    <br>
    <blockquote
      cite="mid:1D96462F-87D3-4794-A818-27DD2EE10046@oracle.com"
      type="cite"><!--[if !IE]><DIV style="border-left: 2px solid #009900; border-right: 2px solid #009900;  padding: 0px 15px; margin: 2px 0px;"><![endif]-->
      <pre wrap="">
David</pre>
      <!--[if !IE]></DIV><![endif]--></blockquote>
    <br>
  </body>
</html>