多线程的基础知识
1、程序、进程、线程的基本概念
程序:为了完成某种任务用某一种语言编写的一组指令的集合就叫程序。程序就是一段静态的代码。
进程:进程是程序的依次执行过程,或者说是正在运行的一个程序。这是一个动态的过程,有它自身的产生运行和消亡的过程--生命周期。进程是资源分配的基本单位。
线程:进程可进一步的划分为线程,线程是一个程序内部的一条执行路径。线程是调度和执行的基本单位,每一个线程拥有独立的程序计数器和运行栈,线程之间切换的开销相对来说比较小。
备注:一个Java程序至少有三个线程:main()线程、垃圾收集线程、异常处理线程。
2、并发和并行的基本概念
并行:多个CPU同时执行多个任务。
并发:一个CPU同时执行多个任务。
3、多线程程序的优点
- 提高应用程序的响应时间
- 提高计算机系统CPU的利用效率
- 改善程序结构。
4、线程的分类
Java中的线程分为用户线程和守护线程。
- 他们两者在几乎每个方面都是相同的,唯一的区别就是判断JVM何时离开
- 守护线程是用来服务用户线程的,但是也可以把一个用户线程更改为守护线程
- Java垃圾回收线程就是一个典型的守护线程
- 如果JVM中的线程全部是守护线程的时候,JVM将会退出
5、线程创建的四种方式
- 使用继承Thread类的方式创建多线程
- 使用实现Runnable接口的方式创建多线程
- 使用实现Callable接口的方式创建多线程
- 使用线程池的方式创建多线程
6、线程的生命周期
一个线程完整的生命周期通常包含五个部分:
- 新建状态:当一个Thread类及其子类的对象被声明并创建时,新生的线程就处于新建状态
- 就绪状态:新建的线程执行start()方法之后,将会进入线程队列等待CPU时间片,此时的线程已经具备了执行的条件,只是没有分配到CPU
- 运行状态:处于就绪状态的线程被调度并且获得了CPU时间片之后,就能执行状态
- 阻塞状态:在某种情况下,当前的线程让出CPU并临时中断自己的执行,此时的线程就进入了阻塞状态
- 死亡状态:线程完成了全部的工作或者被强制提前结束或者线程出现异常导致线程结束
7、什么是线程的安全问题
多线程安全问题,是由于多个线程在访问共享的数据(共享的资源),并且操作共享数据的语句不止一条。那么这样在操作多条共享数据的线程之间就可能发生线程切换。只要切换就可能有安全问题。
当多个线程执行解决某个方法时,不管这些线程如何交替的执行,我们在主程序中不需要去做任何的同步,这个类的结果行为都是我们设想的正确行为,那么我们就可以说这个类时线程安全的。