从一个start一个线程开始
创建一个线程
Thread thread = new Thread(()->{
},"t1");
thread.start();
进入start()方法
可以看到这是一个由synchronize修饰的类
由方法中的实现可以看出,它是通过一个叫start0()的方式来开启一个线程的。
start0是一个原生的方法,由C++编写的。最终使用的是操作系统来调用的。
下载地址gitee:https://gitee.com/chen0218/openjdk8
下载在本地即可
此地址下对应的就是Thread.java对应的c文件
打开会发现strat0方法,他是由JVM_SrartThread进行启动加载的
JVM介于硬件和操作系统之间
打开文件
最终由操作系统来开启一个线程
线程是由底层操作系统来开启的。
Java多线程相关概念
1把锁
synchronized
2个并
并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
**并行:并行是指“并排行走”或“同时实行或实施”。 是在多台处理器上同时进行。
3个程
进程:应用程序的一次运行。操作系统资源分配的最小单位,每一个进程都有它自己的内存空间和系统资源
线程:轻量级进程,在同一个进程内会有1个或多个线程,系统调度的基本单位,共享进程的资源。
管程:monitor(监视器),是一种同步机制,它的义务时保证(同一时刻)只有一个线程可以访问被保护的数据和代码。
JVM同步时居于进入和退出监视器对象来实现的,每个对象实例都会有一个Monitor对象
JVM指出:执行线程就要求先成功持有管程,然后才能执行方法,最后当方法完成(无论是正常完成还是非正常完成)时释放管程。在方法执行期间,执行线程持有了管程。其他任何线程都无法获取到同一个管程。