一、多线程的简单理解
简单理解什么是多线程:在我们不使用多线程技术的时候,我们写出来的程序每次执行时只能调用一个方法或者运行一个接口,只有执行完当前的方法或者接口之后才能继续完成其他任务。但使用了多线程技术之后,我们可以同时完成多个任务。
比如说,我们在使用上一篇 的 IO 流技术时,如果我们的需求是复制两份文件,并且需要有两个封装地文件,在没学习多线程之前,我们只能先复制一份,第一个文件复制完成之后才能复制下一份文件,但使用多线程之后可以同时使用程序复制两份文件。
二、在学习多线程时多需要知道的基本概念
-
多线程的组成部分
- 程序
- 进程
- 线程
1、什么是程序?
- 程序: 我们通过编写代码所实现某些特定的功能,这些功能统称为程序。(当然得是正经程序┗|`O′|┛ 嗷,是能跑起来的那种哟)
2、什么是进程?
-
进程:
- 我们将编写的程序运行起来之后,从开始到结束的整个过程就叫做进程。
- 程序在运行时,会将进程加载到了内存中,并占用了 CPU 的资源。
- 进程是一个动态的过程:有自身的产生、存在和消亡的过程,这也是进程的生命周期。
- 进程是系统资源分配的单位,程序在运行时会为每个进程分配不同的内存区域。
3、什么是线程?
-
线程:
- 进程可进一步细化为线程,是一个程序内部的执行路径。
- 一个进程如果只有一条执行路径,则称为单线程程序
- 一个进程如果有多条执行路径,则称为多线程程序
三、多线程的好处和弊端
- 好处:当我们使用多线程技术来实现程序时,程序的进程中就会存在多个线程。这些线程可以共享进程的内存区,而且内存区的堆和栈空间线程也是可以共享的。也就是说线程可以访问堆中的变量和对象,这样便使程序间数据的流通更加简洁,更加的高效。
- 弊端:但多线程操作共享的系统资源可能就会带来安全隐患(隐患为到底哪个线程操作这个数据,可能存在多个线程同时操作同一条数据的状况)。
四、线程的生命周期
JDk中用Thread.State类定义了线程的几种状态
想要实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类及其子类的对象来表示线程,在他的一个完整的生命周期中通常要经历如下的五种状态:
- 新建:当一个Thread类或其子类的对象被声明并创建时,新的线程对象处于新建状态。
- 就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源。
- 运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run()方法定义了线程的操作和功能。
- 阻塞:在某种特殊情况下,被认为挂起或执行输入输出操作时,让出CPU并临时中止自己的执行,进入阻塞状态。
- 死亡:线程完成了它的全部工作或线程被提前强制性的中止或出现异常倒置导致结束。