1.何为进程和线程?
1.1 何为进程?
进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。在Java中,我们启动main函数是启动类JVM的进程,其中main函数所在的线程就是该进程的主线程。
1.2 何为线程?
线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程或各个线程之间作切换工作时,负担要比进程小得多,因此,线程也被称为轻量级进程。
注意:一个Java程序的运行时main线程与其他多个线程的=同时运行。
2. Java线程与操作系统的线程有啥区别? 在Java1.2,Java是基于绿色线程(GreenThread)的,它是一种用户级线程(由用户空间管理和调度的线程,运行在用户空间,专门给应用程序使用)。JVM自己模拟多线程的运行,不依靠操作系统。在JDK1.2之后,JVM直接使用操作系统原生的内核线程(由操作系统内核管理和调度的线程,运行在内核态,只有内核程序才可访问)实现Java线程,由操作系统内核进行线程的调度和管理。现在的Java线程本质是操作系统的线程。 现成模型是用户县城与内个线程的关联方式,常见线程模型有:- 一对一:一个用户线程对应一个内核线程
- 多对一:多个用户线程映射一个内核线程
- 多对多:多个用户线程映射多个内核线程
在Windows和Linux环境中,采用的线程模型是一对一的现成模型,即一个用户线程对应一个系统内核线程。