Concurrent updates may lead to redundant LambdaForms created and unnecessary class loading when those are compiled.
Most notably, it severely affects MethodHandle customization: when a MethodHandle is called from multiple threads, every thread starts customization which takes enough time for other threads to join, but only one of those customizations will be picked. Coordination between threads requesting the updates and letting a single thread proceed avoids the aforementioned problem. Moreover, there's no need to wait until the update in-flight is over: all other threads (except the one performing the update) can just proceed with the invocation using the existing MH.form. Testing: - manually monitored the behavior on a stress test from [JDK-8252049](https://bugs.openjdk.java.net/browse/JDK-8252049) - tier1-4 ------------- Commit messages: - Improve concurrent LF customization Changes: https://git.openjdk.java.net/jdk/pull/1472/files Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=1472&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8257189 Stats: 90 lines in 5 files changed: 38 ins; 20 del; 32 mod Patch: https://git.openjdk.java.net/jdk/pull/1472.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/1472/head:pull/1472 PR: https://git.openjdk.java.net/jdk/pull/1472