< prev index next >

src/java.base/share/classes/java/lang/ThreadBuilders.java

Print this page
*** 33,10 ***
--- 33,12 ---
  import java.util.Objects;
  import java.util.concurrent.Executor;
  import java.util.concurrent.ThreadFactory;
  import jdk.internal.misc.Unsafe;
  import jdk.internal.invoke.MhUtil;
+ import jdk.internal.reflect.CallerSensitive;
+ import jdk.internal.reflect.Reflection;
  import jdk.internal.vm.ContinuationSupport;
  
  /**
   * Defines static methods to create platform and virtual thread builders.
   */

*** 208,22 ***
      /**
       * ThreadBuilder.OfVirtual implementation.
       */
      static final class VirtualThreadBuilder
              extends BaseThreadBuilder implements OfVirtual {
!         private Executor scheduler;
  
          VirtualThreadBuilder() {
          }
  
-         // invoked by tests
-         VirtualThreadBuilder(Executor scheduler) {
-             if (!ContinuationSupport.isSupported())
-                 throw new UnsupportedOperationException();
-             this.scheduler = Objects.requireNonNull(scheduler);
-         }
- 
          @Override
          public OfVirtual name(String name) {
              setName(name);
              return this;
          }
--- 210,15 ---
      /**
       * ThreadBuilder.OfVirtual implementation.
       */
      static final class VirtualThreadBuilder
              extends BaseThreadBuilder implements OfVirtual {
!         private Thread.VirtualThreadScheduler scheduler;
  
          VirtualThreadBuilder() {
          }
  
          @Override
          public OfVirtual name(String name) {
              setName(name);
              return this;
          }

*** 266,10 ***
--- 261,22 ---
          @Override
          public ThreadFactory factory() {
              return new VirtualThreadFactory(scheduler, name(), counter(), characteristics(),
                      uncaughtExceptionHandler());
          }
+ 
+         @CallerSensitive
+         @Override
+         public OfVirtual scheduler(Thread.VirtualThreadScheduler scheduler) {
+             Class<?> caller = Reflection.getCallerClass();
+             caller.getModule().ensureNativeAccess(OfVirtual.class, "scheduler", caller, false);
+             if (!ContinuationSupport.isSupported()) {
+                 throw new UnsupportedOperationException();
+             }
+             this.scheduler = Objects.requireNonNull(scheduler);
+             return this;
+         }
      }
  
      /**
       * Base ThreadFactory implementation.
       */

*** 367,13 ***
  
      /**
       * ThreadFactory for virtual threads.
       */
      private static class VirtualThreadFactory extends BaseThreadFactory {
!         private final Executor scheduler;
  
!         VirtualThreadFactory(Executor scheduler,
                               String name,
                               long start,
                               int characteristics,
                               UncaughtExceptionHandler uhe) {
              super(name, start, characteristics, uhe);
--- 374,13 ---
  
      /**
       * ThreadFactory for virtual threads.
       */
      private static class VirtualThreadFactory extends BaseThreadFactory {
!         private final Thread.VirtualThreadScheduler scheduler;
  
!         VirtualThreadFactory(Thread.VirtualThreadScheduler scheduler,
                               String name,
                               long start,
                               int characteristics,
                               UncaughtExceptionHandler uhe) {
              super(name, start, characteristics, uhe);

*** 393,11 ***
      }
  
      /**
       * Creates a new virtual thread to run the given task.
       */
!     static Thread newVirtualThread(Executor scheduler,
                                     String name,
                                     int characteristics,
                                     Runnable task) {
          if (ContinuationSupport.isSupported()) {
              return new VirtualThread(scheduler, name, characteristics, task);
--- 400,11 ---
      }
  
      /**
       * Creates a new virtual thread to run the given task.
       */
!     static Thread newVirtualThread(Thread.VirtualThreadScheduler scheduler,
                                     String name,
                                     int characteristics,
                                     Runnable task) {
          if (ContinuationSupport.isSupported()) {
              return new VirtualThread(scheduler, name, characteristics, task);
< prev index next >