< prev index next > src/java.base/windows/classes/sun/nio/ch/NativeThread.java
Print this page
* questions.
*/
package sun.nio.ch;
-
- // Signalling operations on native threads
+ import java.util.concurrent.locks.LockSupport;
public class NativeThread {
- private static final long VIRTUAL_THREAD_ID = -1L;
-
- /**
- * Returns the id of the current native thread if the platform can signal
- * native threads, 0 if the platform can not signal native threads, or
- * -1L if the current thread is a virtual thread.
- */
- public static long current() {
- if (Thread.currentThread().isVirtual()) {
- return VIRTUAL_THREAD_ID;
- } else {
- // no support for signalling threads on Windows
- return 0;
- }
- }
+ private NativeThread() { }
/**
- * Signals the given native thread.
- *
- * @throws IllegalArgumentException if tid is not a token to a native thread
+ * Returns the Thread to signal the current thread or {@code null} if the current
+ * thread cannot be signalled.
*/
- static void signal(long tid) {
- throw new UnsupportedOperationException();
+ public static Thread threadToSignal() {
+ Thread thread = Thread.currentThread();
+ return thread.isVirtual() ? thread : null;
}
/**
- * Returns true the tid is the id of a native thread.
+ * Signals the given thread.
+ * @throws UnsupportedOperationException is not supported
*/
- static boolean isNativeThread(long tid) {
- return false;
- }
-
- /**
- * Returns true if tid is -1L.
- * @see #current()
- */
- static boolean isVirtualThread(long tid) {
- return (tid == VIRTUAL_THREAD_ID);
+ public static void signal(Thread thread) {
+ if (thread.isVirtual()) {
+ LockSupport.unpark(thread);
+ } else {
+ throw new UnsupportedOperationException();
+ }
}
}
< prev index next >