Thread.yield()
1 | /** |
在 ConcurrentHashMap 的 initTable 方法中,可以看到对该方法的使用,源码如下:
1 | /** |
可以看出,若当前线程判断 table 当前时刻已经在被其他线程进行初始化时,则调用 Thread.yield()
提示调度程序当前线程愿意放弃对当前处理器的使用权,以尝试降低对 CPU 的争用。
同样的,在 Sentinel 核心数据结构 LeapArray 的源码中,也可以看到对该方法的调用,部分源码如下:
1 | /** |
Thread.sleep()
1 | /** |
Thread.isDaemon()
1 | /* Whether or not the thread is a daemon thread. */ |
Thread.join()
1 | /** |
Thread.getId()
1 | /* |
Java 内部的线程 id 与底层操作系统的线程 id 无关,根据 Thread 的源码我们知道,Java 中在每次创建线程时使用同步方法 nextThreadID
对静态变量 threadSeqNumber
加一的值作为新生成的线程的 id,对于底层平台的线程 id,我们在线程转储中可以看到,其中 nid=0x7dc8
就是使用十六进制表示的底层平台的线程 id。参见:PrintThreadIds.java
References
Class Thread
Enum Thread.State
Processes and Threads
Thread.yield()
Thread.sleep()
Preemption (computing)
Yield (multithreading)
Sleep (system call)
Run queue
Scheduling (computing)
Daemon Threads in Java