Hi, So many alternnatives...
But making TimeZone.getTimeZone("UTC") a static final is definitively a good idea and could be done for 2.* too.
Tilman On 08.08.2023 19:30, Daniel Gredler wrote:
Hi, I think I've said this before, but thanks again for such a great library! I'm thinking about submitting a patch to improve PDFBox, but wanted to get the team's thoughts first. What I've seen is that sometimes under very heavy load across multiple threads, PDF creation stalls due to lock contention, because `TTFDataStream.readInternationalDate()` uses `TimeZone.getTimeZone(String)`, which is synchronized. I assume that the inverse operation, `TTFSubsetter.writeLongDateTime(DataOutputStream,Calendar)`, has a similar issue, though I have not seen it myself. If these classes were using the newer `java.time` APIs, they could simply use the `ZoneOffset.UTC` constant... but they are using the older `Calendar` API (and exposing this fact), so `TimeZone` must be used. So a few questions from my side: Is there a plan to move off of the older time APIs and onto the newer `java.time` APIs, perhaps as part of version 3.0? (e.g. `Calendar` -> `ZonedDateTime`) Either way, I'm pretty sure such a breaking change is not contemplated for the 2.x release series, correct? `TimeZone` is not technically thread-safe, but there only a couple of rarely-used dangerous mutators, AFAIK (`setRawOffset(int)`, `setID(String)`). Would it be OK to keep a static final UTC `TimeZone` and just reuse that, even though `TimeZone` is only 95% immutable? If not, what about keeping a static final UTC `TimeZone` constant and creating a clone each time it is needed, to avoid the synchronization? (`Calendar.getTimeZone()` makes liberal use of `clone()`, for example). If that doesn't work, what about subclassing `TimeZone` and overriding the mutators with methods that just throw `UnsupportedOperationException`s, and using the subclass for the static final UTC constant? Commons Lang 3 does something similar with `GmtTimeZone` and the `FastTimeZone` utility class here: https://github.com/apache/commons-lang/blob/bf5865ae915ececcdbfa7a473b0d708e3e235bcf/src/main/java/org/apache/commons/lang3/time/FastTimeZone.java#L38 Thanks for the feedback! Daniel
--------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org