RFR: 8277585: Remove the terminally deprecated finalize() method from javax.imageio.stream APIs [v2]
Brent Christian
bchristi at openjdk.org
Thu Aug 7 00:12:14 UTC 2025
On Wed, 6 Aug 2025 22:25:37 GMT, Phil Race <prr at openjdk.org> wrote:
>> src/java.desktop/share/classes/javax/imageio/stream/FileCacheImageOutputStream.java line 249:
>>
>>> 247: }
>>> 248: try {
>>> 249: cache.close();
>>
>> I notice a similar nested class/method in FileCacheImageInputStream with a few differences. Does the cache.close() and cacheFile.delete need to be wrapped in null checks? And once deleted do the StreamDisposerRecord pointers (this.cacheFile and this.cache) need to be set to null like in the ImageInputStream version of the code?
>
> Yes, I could re-use that. I just need to make it accessible .. but not public.
> That one has null checks because it clears the vars.
> My version uses a "disposed" var for the same since I made those vars final.
Use of `final` is recommended wherever possible, as the values are then guaranteed to be visible on other threads (e.g. the disposer thread).
However IIUC, values set in a `DisposerRecord` by a program thread should (already) be visible on the disposer thread because `Disposer.add()` and `Disposer.run()` (via `records.put()` and `records.remove()`, respectively) lock the same `records` `Hashtable` object.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/26650#discussion_r2258574384
More information about the client-libs-dev
mailing list