On Thu, 23 Jan 2025 22:23:29 GMT, Justin Lu <j...@openjdk.org> wrote:
>> src/java.base/share/classes/java/util/TimeZone.java line 659: >> >>> 657: * @since 25 >>> 658: */ >>> 659: public static synchronized Stream<String> availableIDs(int >>> rawOffset) { >> >> Why are these new methods synchronized? I think the streams and the >> spliterators are late-binding, so the synchronization does not synchronize >> the access to the underlying arrays. synchronized modifier also does not >> appear in Javadoc and is not part of the API surface, so it can be safely >> removed. > > Right, it can be removed. Actually, I think `getAvailableIDs()` and > `getAvailableIDs(int)` also do not need to be synchronized. The internal IDs > are eagerly initialized in the static block of `ZoneInfoFile.java` and are > effectively final and not modified. Yep; their synchronized are incorrect. The object monitor lock should have been on `ZoneInfoFile.class` to be effective. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/23251#discussion_r1927788351