--- old/src/java.base/share/classes/java/net/MulticastSocket.java 2020-04-01 14:14:59.000000000 +0100 +++ new/src/java.base/share/classes/java/net/MulticastSocket.java 2020-04-01 14:14:58.000000000 +0100 @@ -809,23 +809,27 @@ } //synch ttl } //method - private static Set> options; - private static boolean optionsSet = false; + private volatile Set> options; + private final Object optionsLock = new Object(); @Override public Set> supportedOptions() { - synchronized (MulticastSocket.class) { - if (optionsSet) { + Set> options = this.options; + if (options != null) + return options; + + synchronized (optionsLock) { + options = this.options; + if (options != null) return options; - } + try { DatagramSocketImpl impl = getImpl(); options = Collections.unmodifiableSet(impl.supportedOptions()); - } catch (SocketException ex) { + } catch (IOException e) { options = Collections.emptySet(); } - optionsSet = true; - return options; + return this.options = options; } } }