< prev index next >

src/java.base/unix/classes/sun/nio/ch/NativeThread.java

Print this page
*** 1,7 ***
  /*
!  * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.  Oracle designates this
--- 1,7 ---
  /*
!  * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.  Oracle designates this

*** 34,24 ***
  // upon which Java threads are built, and defines a simple signal mechanism
  // that can be used to release a native thread from a blocking I/O operation.
  // On systems that do not require this type of signalling, the current() method
  // always returns -1 and the signal(long) method has no effect.
  
- 
  public class NativeThread {
  
      // Returns an opaque token representing the native thread underlying the
      // invoking Java thread.  On systems that do not require signalling, this
!     // method always returns -1.
      //
!     public static native long current();
  
      // Signals the given native thread so as to release it from a blocking I/O
      // operation.  On systems that do not require signalling, this method has
      // no effect.
      //
!     public static native void signal(long nt);
  
      private static native void init();
  
      static {
          IOUtil.load();
--- 34,68 ---
  // upon which Java threads are built, and defines a simple signal mechanism
  // that can be used to release a native thread from a blocking I/O operation.
  // On systems that do not require this type of signalling, the current() method
  // always returns -1 and the signal(long) method has no effect.
  
  public class NativeThread {
+     private static final long VIRTUAL_THREAD_ID = -1L;
+ 
+     /**
+      * Returns a token representing the current thread or -1 if called in the
+      * context of a virtual thread
+      */
+     public static long current() {
+         if (Thread.currentThread().isVirtual()) {
+             return VIRTUAL_THREAD_ID;
+         } else {
+             return current0();
+         }
+     }
+ 
+     /**
+      * Returns a token representing the current kernel thread
+      */
+     static long currentKernelThread() {
+         return current0();
+     }
+ 
+     /**
+      * Signals the given thread.
+      *
+      * @throws IllegalArgumentException if tid is not a token to a kernel thread
+      */
+     public static void signal(long tid) {
+         if (tid == 0 || tid == VIRTUAL_THREAD_ID)
+             throw new IllegalArgumentException();
+         signal0(tid);
+     }
+ 
+     /**
+      * Returns true if the token presents a virtual thread
+      */
+     static boolean isVirtualThread(long tid) {
+         return (tid == VIRTUAL_THREAD_ID);
+     }
+ 
+     /**
+      * Returns true if the token presents a kernel thread
+      */
+     static boolean isKernelThread(long tid) {
+         return (tid != 0 && tid != VIRTUAL_THREAD_ID);
+     }
  
      // Returns an opaque token representing the native thread underlying the
      // invoking Java thread.  On systems that do not require signalling, this
!     // method always returns 0.
      //
!     private static native long current0();
  
      // Signals the given native thread so as to release it from a blocking I/O
      // operation.  On systems that do not require signalling, this method has
      // no effect.
      //
!     private static native void signal0(long tid);
  
      private static native void init();
  
      static {
          IOUtil.load();
< prev index next >