RFR: 8284161: Implementation of Virtual Threads (Preview) [v2]

Alan Bateman alanb at openjdk.java.net
Wed Apr 13 14:59:32 UTC 2022


On Wed, 13 Apr 2022 11:38:55 GMT, ExE Boss <duke at openjdk.java.net> wrote:

>> Thanks - the same issue appears with `BufferedWriter`/`Writer`.
>
> The solution is to add the `private` constructor:
> 
> 	private Reader(Object fallbackLock, Void internal) {
> 		// assert fallbackLock != null;
> 		// use InternalLock for trusted classes
> 		Class<?> clazz = getClass();
> 		if (clazz == InputStreamReader.class
> 			|| clazz == BufferedReader.class
> 			|| clazz == FileReader.class
> 			|| clazz == sun.nio.cs.StreamDecoder.class) {
> 			this.lock = InternalLock.newLockOr(fallbackLock);
> 		} else {
> 			this.lock = fallbackLock;
> 		}
> 	}
> 
> to `Reader` (and an equivalent `private` constructor to `Writer`).
> 
> ---
> 
> The `protected` `Reader` constructors can then be changed to:
> 
> 	protected Reader() {
> 		this(this, null);
> 	}
> 
> and
> 
> 	protected Reader(Object lock) {
> 		this(Objects.requireNonNull(lock), null);
> 	}
> 
> 
> ---
> 
> Doing so will allow this change to be reverted:
> Suggestion:
> 
>         super(in);

> Thanks - the same issue appears with `BufferedWriter`/`Writer`.

Right. I think we can reduce this to the case where a BufferedReader is not subclassed, and it wraps an InputStreamReader or FileReader that have not been subclassed. Similarly the case where a BufferedWriter is not subclassed and it wraps an OutputStreamWriter or FileWriter that have not been subclassed.

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

PR: https://git.openjdk.java.net/jdk/pull/8166


More information about the hotspot-jfr-dev mailing list