< prev index next >

test/jdk/java/io/ByteArrayOutputStream/WriteToReleasesCarrier.java

Print this page
*** 25,25 ***
   * @test
   * @bug 8330748
   * @summary Test ByteArrayOutputStream.writeTo releases carrier thread
   * @requires vm.continuations
   * @modules java.base/java.lang:+open
   * @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;
  
  public class WriteToReleasesCarrier {
      public static void main(String[] args) throws Exception {
          byte[] bytes = "Hello".getBytes(StandardCharsets.UTF_8);
  
--- 25,26 ---
   * @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.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);
  

*** 51,11 ***
          baos.write(bytes);
  
          var target = new ParkingOutputStream();
  
          try (ExecutorService scheduler = Executors.newFixedThreadPool(1)) {
!             Thread.Builder builder = virtualThreadBuilder(scheduler);
              var started = new CountDownLatch(1);
              var vthread1 = builder.start(() -> {
                  started.countDown();
                  try {
                      baos.writeTo(target);
--- 52,11 ---
          baos.write(bytes);
  
          var target = new ParkingOutputStream();
  
          try (ExecutorService scheduler = Executors.newFixedThreadPool(1)) {
!             Thread.Builder builder = VThreadScheduler.virtualThreadBuilder(scheduler);
              var started = new CountDownLatch(1);
              var vthread1 = builder.start(() -> {
                  started.countDown();
                  try {
                      baos.writeTo(target);

*** 116,16 ***
  
          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);
-     }
  }
--- 117,6 ---
< prev index next >