JAVA中线程(一)之基础知识

124 阅读3分钟

这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战

前言:今天我们来说一下JAVA中线程的一些基本信息和概念。

什么是线程、进程?

进程:如下图,进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,即进程空间或(虚空间)。一个应用程序中可以有多个进程,如:程序A有进程1、2、3,3个进程。进程不依赖于线程而独立存在。

线程:如下图,线程是指进程中的一个执行流程,一个进程中可以启动多个线程,如:进程2内有线程2、3、4,3个线程。

image.png

什么是并行、串行、并发?

前提:我们先设立事情A、事情B、事情C,三个事情。A的准备时间为5分钟等待时间为5分钟,B的准备时间为3分钟等待时间为2分钟,C的准备时间为5分钟

并行:如下图(a)所示,并行其实很容易理解也就是说,在一个时间点只能有一个事情(任务)发生,也就是说经过串行化,理想状态下可以认为ABC一起完成所需要的时间是20分钟

并发:如下图(b)所示,并发也就是说在事情A准备时间5分钟过了再等待的这几分钟内B或者C中途穿插了其他的事情一同运行,理想状态下可以认为ABC一起完成的时间在10分钟和20分钟之内。

并行:如下图(c)所示,并行则是三个事情同一时刻一同运行的,理想状态下可以认为ABC一起完成的时间是10分钟。

image.png

线程的各类状态:

image.png 1、新状态:线程对象已经创建,还没有在其上调用start()方法。

2、可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当start()方法调用时,线程首先进入可运行状态。在线程运行之后或者从阻塞、等待或睡眠状态回来后,也返回到可运行状态。

3、运行状态:线程调度程序从可运行池中选择一个线程作为当前线程时线程所处的状态。这也是线程进入运行状态的唯一一种方式。

4、等待/阻塞/睡眠状态:这是线程有资格运行时它所处的状态。实际上这个三状态组合为一种,其共同点是:线程仍旧是活的,但是当前没有条件运行。换句话说,它是可运行的,但是如果某件事件出现,他可能返回到可运行状态。

5、死亡态:当线程的run()方法完成时就认为它死去。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦死亡,就不能复生。如果在一个死去的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。

总结:今天我们说了线程的一些基本信息,在开发中线程问题我们时常遇见,明天我来说一下在JAVA中我们创建线程的3个方式,以及线程中我们常见的API。