< 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
*** 35,57 **** // 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(); --- 35,105 ---- // 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. + import jdk.internal.misc.Strands; + public class NativeThread { + private static final long FIBER_ID = -1L; + + /** + * Returns a token representing the current thread or -1 if called in the + * context of a Fiber. + */ + public static long current() { + Object s = Strands.currentStrand(); + if (s instanceof Fiber) { + return FIBER_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 == FIBER_ID) + throw new IllegalArgumentException(); + signal0(tid); + } + + /** + * Returns true if the token presents a fiber rather than a thread + */ + static boolean isFiber(long tid) { + return (tid == FIBER_ID); + } + + /** + * Returns true if the token presents a kernel thread + */ + static boolean isKernelThread(long tid) { + return (tid != 0 && tid != FIBER_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 >