diff --git a/docs/essential-content-for-interview/MostCommonJavaInterviewQuestions/第四周(2018-8-30).md b/docs/essential-content-for-interview/MostCommonJavaInterviewQuestions/第四周(2018-8-30).md index cf19fac9..82d0a02b 100644 --- a/docs/essential-content-for-interview/MostCommonJavaInterviewQuestions/第四周(2018-8-30).md +++ b/docs/essential-content-for-interview/MostCommonJavaInterviewQuestions/第四周(2018-8-30).md @@ -1,6 +1,21 @@ ## 1. 简述线程,程序、进程的基本概念。以及他们之间关系是什么? +**线程**与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。 + +**程序**是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。 + +**进程**是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 + +**线程** 是 **进程** 划分成的更小的运行单位。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。从另一角度来说,进程属于操作系统的范畴,主要是同一段时间内,可以同时执行一个以上的程序,而线程则是在同一程序内几乎同时执行一个以上的程序段。 + +**线程上下文的切换比进程上下文切换要快很多** + +- 进程切换时,涉及到当前进程的CPU环境的保存和新被调度运行进程的CPU环境的设置。 +- 线程切换仅需要保存和设置少量的寄存器内容,不涉及存储管理方面的操作。 + +## 2. 线程有哪些基本状态?这些状态是如何定义的? + Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态(图源《Java 并发编程艺术》4.1.4 节)。 ![Java 线程的状态 ](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/19-1-29/Java%E7%BA%BF%E7%A8%8B%E7%9A%84%E7%8A%B6%E6%80%81.png)