一、线程概念
进程:简单说,系统中运行的一个应用程序就是一个进程
线程:轻量级进程,时序调度的基本单元。
轻量级:比进程耗费的资源少,运行速度更快。
进程之间是相互独立的,资源不共享。但线程之间资源共享。
线程之间切换容易,进程之间切换更加耗费资源,代价更高。
时序调度:
操作系统对任务执行时间先后的调度过程。
线程就是时序调度的基本单元。
基本的调度方式:抢占式
说白了就是抢占cpu的时间片。
并发与并行
并行:是指两个或多个事件在同一时间发生。
并发:同一时间间隔内,两个或多个事件交替发生。
二、线程的风险
线程安全性问题:
多线程环境下,程序运行结果和预期的不一样。但是单线程下没问题。
伴生现象:不太容易复现,每次运行的结果都可能不太一样。
线程的活跃度问题:
死锁:互相持有对方需要的锁,相互等待释放。
饥饿:某个线程较长时间,或者很难得到执行。始终抢不到cpu的时间片。
活锁:线程拿到了锁,却又相互释放,不去执行。
线程的性能问题:
主要是线程间切换上下文的开销
切换上下文的时候,线程a需要保存它当前的运行状态,下次抢到cpu时间片,继续运行,需要先恢复状态,然后再继续向下执行,这样一来就肯定会有性能开销,可能还跑不过单线程的运行效率。
三、如何创建线程
创建线程的方式:
1、实现Runnable接口,这个接口里只有一个run方法。
2、继承Thread类
3、实现callable接口,带返回值
四、线程状态
五、线程的基本操作
六、线程安全性