Q: 简述线程、程序、进程的基本概念。以及他们之间关系是什么?

程序是含有指令和数据的文件,被存储在磁盘或其他数据存储设备中,也就是说程序是静态的代码。

进程是程序的⼀次执⾏过程,是系统运⾏程序的基本单位,系统运⾏⼀个程序即是⼀个进程从创建,运⾏到消亡的过程。

线程是进程划分成的更⼩的运⾏单位,线程是处理器任务调度和执行的基本单位。线程和进程最⼤的不同在于基本上各进程是独⽴的,⽽各线程则不⼀定,因为同⼀进程中的线程极有可能会相互影响。

Q: java线程的状态状态

一种是将其分为6种一种是分为5种

6种(主要是从java代码的角度来进行划分。)

img

在这里插入图片描述

  1. 新建状态(NEW) :

    使用new关键字创建一个thread对象,刚刚创建出的这个线程就处于新建状态。在这个状态的线程没有与操作系真正的线程产生关联,仅仅是一个java对象。

  2. 可运行(RUNABLE):

    正在进行运行的线程,只有处于可运行状态的线程才会得到cpu资源。

  3. 阻塞(BLOCKED) :

    在可运行阶段争抢锁失败的线程就会从可运行—->阻塞

  4. 等待(WAITING) :

    可运行状态争抢锁成功,但是资源不满足,主动放弃锁(调用wait()方法)。条件满足后再恢复可运行状态(调用notiy()方法)

  5. 有时限等待(TIMED WAITING):

    类似于等待,不过区别在于有一个等待的时间,到达等待时间后或者调用notiy(),都能恢复为可运行状态。

    有两种方式可以进入有时限等待:wait(Long)和sleep(Long)

  6. 终结 (TERMINATED)

    代码全部执行完毕后,会进入到终结状态,释放所有的资源。

5种 :划分依据:从操作系统层面划分

划分依据:从操作系统层面划分

img

  1. 新建

    类似于六种,刚刚创建出的这个线程就处于新建状态。

  2. 就绪

    线程分到CPU时间运行代码,但是还没有运行。

  3. 运行

    线程分到CPU时间运行代码,并且正在运行。

  4. 阻塞

    线程暂时没有分到时间运行代码,就会进入阻塞状态,包括以下四种情况:

    • a. IO阻塞:不需要cpu资源(磁盘读写,网络读写)

    • b. BLOCKED

    • c. WAITING

    • d. TIMED_WAITING

  5. 终结

    类似于代码全部执行完毕后,会进入到终结状态,释放所有的资源。