##### 线程本质

源码---》 本质

jvm源码

[http://hg.openjdk.java.net](http://hg.openjdk.java.net/)

Android系统源码

> start方法是一个同步方法，首先会检查状态，如果状态不为0(NEW),抛异常，所以如果多次调用同一个线程的start方法时，只有一次能够成功，其他情况下都会抛异常.然后将该线程对象加入到threadGroup中，threadGroup用一个数组来记录了这个组有哪些线程,紧接着调用本地方法start0,
>
> 如果调用中有异常，会从threadGroup中移除该thread对象.接下来看下start0,其实现在jvm中，对应JVM_StartThread方法,jvm在java调用start方法时， 
>
> start0--->JVM_StartThread 函数



 

```
  0000: monitor-enter v1
  0001: const/16 v0, #int 100 // #0064
  0003: monitor-exit v1
  0004: return-void
```



 

dex查看命令

```
dx --dex --verbose --dump-to=Demo.dex.txt --dump-method=Demo.foo --verbose-dump Demo.class
```

用到源代码

>  hotspot/src/share/vm/interpreter/interpreterRuntime.cpp
>
> hotspot\src\os\linux\vm\os_linux.cpp
>
> hotspot-源码\src\share\vm\runtime\thread.cpp
>
> hotspot\src\share\vm\prims\jvm.cpp
>
> android-8.0.0_r1\libcore\ojluni\src\main\native\Thread.c
>
> hotspot\src\share\vm\runtime\objectMonitor.hpp