近期整理笔记想开个专题,准备从并发入手。并发这块又从哪里入手,一开始想的是AQS,偶然间看到自己之前编译调试openjdk的时候整理的一些笔记,又有了新的想法,决定先从最基础的开始,并发这块脱离不了线程,那么我们就结合jdk,hotspot探究一下线程的来龙去脉。 线程的定义:程序运行的最小单元,被包含在进程中。
class Thread implements Runnable {
/* Make sure registerNatives is the first thing <clinit> does. */
private static native void registerNatives();
static {
registerNatives();
}
...//省略一大波代码,和一些英文注释
public synchronized void start() {
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this);
boolean started = false;
try {
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
/* do nothing. If start0 threw a Throwable then
it will be passed up the call stack */
}
}
}
通常我们使用线程都是调用的start()方法;
从上面的Thread的源码结构我们可以看到start()方法
先判断是否是NEW状态,如果不是,抛出线程状态异常;
接下来执行start0()
仅仅用作测试!娜娜你好~
- 断断续续笔记也写了不少了,准备整理成技术文档分享出来,共勉~
- github原名称太长,重新改了名字,pages也重建了…