Java中进程和线程的关系

65 阅读2分钟

1、什么是进程?什么是线程?

进程是:一个应用程序(1个进程是一个软件)。

线程是:一个进程中的执行场景/执行单元。

注意:一个进程可以启动多个线程。

对于java程序来说,当在DOS命令窗口中输入: java HelloWorld 回车之后。会先启动JVM,而JVM就是一个进程。

JVM再启动一个主线程调用main方法(main方法就是主线程)。 同时再启动一个垃圾回收线程负责看护,回收垃圾。

最起码,现在的java程序中至少有两个线程并发,一个是 垃圾回收线程,一个是 执行main方法的主线程。

2、进程和线程是什么关系?

进程:可以看做是现实生活当中的公司。

线程:可以看做是公司当中的某个员工。

注意: 进程A和进程B的 内存独立不共享。

线程A和线程B是什么关系?

在java语言中:

线程A和线程B,堆内存 和 方法区 内存共享。但是 栈内存 独立一个线程一个栈

假设启动10个线程,会有10个栈空间,每个栈和每个栈之间,互不干扰,各自执行各自的,这就是多线程并发。

并行和并发

  • 并行是物理上同时发生,指在某一个时间点同时运行多个程序
  • 并发是逻辑上同时发生,指在某一个时间段内同时运行多个程序

Java程序运行原理和JVM的启动是否是多线程的 ?

  • Java程序的运行原理:

    • 由java命令启动JVM,JVM启动就相当于启动了一个进程
    • 接着有该进程创建了一个主线程去调用main方法
  • JVM虚拟机的启动是单线程的还是多线程的 ?

    • 垃圾回收线程也要先启动,否则很容易会出现内存溢出
    • 现在的垃圾回收线程加上前面的主线程,最低启动了两个线程,所以,jvm的启动其实是多线程的
    • JVM启动至少启动了垃圾回收线程和主线程,所以是多线程的