java进程与线程知识_Java多线程知识梳理(一)进程与线程

打算利用写博客的形式,把自己之前所学的有关多线程的零散知识做一个系统的汇总,但是由于工作优先级更高,只能利用自己闲暇时间,一边回忆,一边翻阅资料不断完善,不知道最终会是什么样的,但还是需要坚持做下去。关于多线程,自己学的并不是很多,也不是很深入。文章的大纲初步定为如下几点,实际写的时候再继续完善。

1.基础概念

2.Java中产生线程的三种方式

3.线程池概念

4.锁机制

5.锁的内部实现

6.。。。。。。

一. 基础概念

进程: 在当代操作系统中,进程是运行程序的抽象。从狭义观念说,进程就是一个正在运行的程序,所有程序的运行都是基于进程的。如果以Java中类和对象的关系来形容,那么程序就是一个类,而执行改程序的进程就是该类的一个对象。进程与进程之间互相独立,各自拥有属于其的计算机资源,但是计算机资源是有限的,尤其是CPU资源,所以多个进程之间,CPU会为每个进程执行一段时间,然后切换到另一个进程,所以对于单核处理而言,没有绝对意义上的并发,所有任务都是串行执行,只是由于CPU的速度太快了,在人眼中,计算机在并发的执行我们所下发的任务。

进程创建的方式:

1)  系统初始化

2)  一个正在运行的进程通过执行创建进程的程序创建一个新的进程

3) 用户请求创建一个新的进程

4) 启动批处理任务

进程终止的条件:

1)正常退出(主动)

2)错误退出(主动)

3)致命错误导致退出(被动)

4) 被其他进程“杀”了(被动)

进程状态:

虽然进程与进程之间是相互独立的,但并不影响进程之间的互相合作,也许后一个进程执行的条件来自于前一个进程的执行结果。

例如:cat version.text | grep xkx,grep 命令所在的进程执行需要 cat命令所在的进程将其执行的结果传给grep

一个进程会有三种状态:

1)运行状态(正在使用CPU中运行)

2) 就绪状态(可运行,但在等待CPU调用)

3) 阻塞状态(无法运行直到某个特定的条件出现)

java进程与线程知识_Java多线程知识梳理(一)进程与线程_第1张图片

维基百科的介绍:

线程包含在进程之中,是操作系统能够进行运算调度的最小单位,是进程中的实际运作单位。一条线程指的是进程中的一个单一顺序控制流。在现代操作系统中,一个进程可以拥有多个线程(嗯传统的操作系统一个进程只会有一个线程,资源的利用率不高);相较于进程,线程在量级上更轻,更容易被创建以及销毁,在绝大多数的OS中,一个线程的创建速度要比进程的创建速度块10-100倍。

一个进程中的每一个线程都有属于其自己的调用栈,寄存器环境,线程本地存储。

由于操作系统分为用户层以及核心层,所以线程又会被分为两类,即用户线程以及内核线程,以文件的读写为例,用户在打开记事本时,一个进程就被创建,同时会有用户线程创建,负责与用户的交互,但是数据的落盘,即I/O,涉及到核心层的操作,通过上下文的切换,阻塞用户线程,cpu从用户层空间切换到核心层,创建内核线程并执行相关操作,待内核线程执行完毕后,CPU又会切换回用户层,唤醒之前被阻塞的线程继续执行

java进程与线程知识_Java多线程知识梳理(一)进程与线程_第2张图片

java进程与线程知识_Java多线程知识梳理(一)进程与线程_第3张图片

你可能感兴趣的:(java进程与线程知识)