On Tue, 30 Nov 2021 23:03:42 GMT, Valerie Peng <valer...@openjdk.org> wrote:
> > Consider this case, two threads are changing a value at the same time. > > Since the method is not synchonized, thread1 might finish the first part of > > the method (`super.replace`) earlier than thread2, but it finishes the > > second part (`parseLegacy`) later than thread2. At the end, the internal > > entrySet has thread2's value but the legacy map has thread1's value. > > Well, then the synchronized keyword should be put on the public methods > instead of the internal parseLegacy() method, no? Otherwise, the super.xxx() > and the internal legacyMap may not updated in sync. The public methods did > have the synchronized keywords which I removed since the putService() call > isn't synchronized either (and it updates the serviceMap first and then > stores the String-String mapping into super.xxx()). The main performance > bottleneck is in getService(), so I can add back the "synchronized" keywords > to other public methods if you are concerned. Can you tell me which version of jdk fixes these bugs ------------- PR: https://git.openjdk.org/jdk/pull/6513