< prev index next > test/jdk/java/io/ByteArrayOutputStream/WriteToReleasesCarrier.java
Print this page
* @test
* @bug 8330748
* @summary Test ByteArrayOutputStream.writeTo releases carrier thread
* @requires vm.continuations
* @modules java.base/java.lang:+open
+ * @library /test/lib
* @run main WriteToReleasesCarrier
*/
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
- import java.lang.reflect.Constructor;
import java.util.Arrays;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.LockSupport;
+ import jdk.test.lib.thread.VThreadScheduler;
public class WriteToReleasesCarrier {
public static void main(String[] args) throws Exception {
byte[] bytes = "Hello".getBytes(StandardCharsets.UTF_8);
baos.write(bytes);
var target = new ParkingOutputStream();
try (ExecutorService scheduler = Executors.newFixedThreadPool(1)) {
- Thread.Builder builder = virtualThreadBuilder(scheduler);
+ Thread.Builder builder = VThreadScheduler.virtualThreadBuilder(scheduler);
var started = new CountDownLatch(1);
var vthread1 = builder.start(() -> {
started.countDown();
try {
baos.writeTo(target);
byte[] toByteArray() {
return baos.toByteArray();
}
}
-
- /**
- * Returns a builder to create virtual threads that use the given scheduler.
- */
- static Thread.Builder.OfVirtual virtualThreadBuilder(Executor scheduler) throws Exception {
- Class<?> clazz = Class.forName("java.lang.ThreadBuilders$VirtualThreadBuilder");
- Constructor<?> ctor = clazz.getDeclaredConstructor(Executor.class);
- ctor.setAccessible(true);
- return (Thread.Builder.OfVirtual) ctor.newInstance(scheduler);
- }
}
< prev index next >