RFR: 8341566: Adding factory for non-synchronized CharSequence Reader

Markus KARG duke at openjdk.org
Sun Oct 6 15:06:33 UTC 2024


On Sun, 6 Oct 2024 14:35:35 GMT, Chen Liang <liach at openjdk.org> wrote:

>> src/java.base/share/classes/java/io/Reader.java line 341:
>> 
>>> 339:             public void close() {
>>> 340:                 cs = null;
>>> 341:             }
>> 
>> @AlanBateman I need to confess that I did not understand what you had in mind when you wrote this on the mailing list:
>>> That doesn't excuse you completely from thinking about concurrent use as Readers have a close method so you'll need to think about how close is specified for when it is called while another thread is reading chars from a custom CS.
>> 
>> As this new implementation explicitly is for single-threaded use only, there is no such other thread that could call `close` concurrently.
>> 
>> Maybe I am missing something here, so I would kindly ask for an outline of a scenario where -despite the explicit single-thread note- a second thread *does* exist?
>
> A scenario would be that this reader is shared by multiple threads in an argument to `Runnable`, like create 100 runnables, 50 are trying to close while 50 are reading to char arrays. There will be scenarios where some reading thread is reading while some closing thread invokes `close` and completes before the reading thread completes.
> 
> I think the key takeaway here is that `close` does not block until other threads finish reading, does not affect already-begun reading operations, and the closed state might not be immediately observed by other threads (as we do not release-write and acquire-read the cs clearing state). However, I don't know which of these attributes should be explicitly specified in our API specification.

As Alan suggested, I just now in this very minute have added a more clear statement about the fact that it is invalid to share this Reader instance among multiple threads without *external* synchronization. That will prevent the scenario you mention.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/21371#discussion_r1789124884


More information about the core-libs-dev mailing list