1. 什么是线程? 线程和进程的区别多线程
在了解线程的概念前,咱们应该先知道什么是进程?并发
进程是操做系统的基本概念之一, 它是正在执行的程序实例。函数
* 下面的一些进程的基本概念你能够了解下 操作系统
--------------------------------------------------------------------线程
操做系统逻辑上将一个进程分为如下几部分(段):设计
# 文本生命周期
程序的指令队列
# 数据进程
程序使用的静态变量内存
# 堆
程序可从该区域动态分配额外内存
# 栈
随函数调用和返回而增减的一片内存, 用于为局部变量和函数调用连接信息分配存储空间
--------------------------------------------------------------------
那么,什么是线程呢?
线程是程序执行的最小单位。
咱们能够把线程看作是轻量级的进程。
使用多线程而不是多进程去进行并发程序的设计,是由于线程间的切换和调度成本要远远小于进程。
2. 线程的生命周期和各个状态
NEW(新生)
线程刚被新建好以后,进入 NEW(新生)状态
这个时候线程还没开始执行
RUNNABLE(运行)
当线程的start()方法调用时, 才表示线程开始执行。
BLOCKED(阻塞)
若是线程在执行的过程当中遇到了synchronized同步块, 就会进入
BLOCKED(阻塞)状态, 这时线程会暂停执行,知道得到请求的锁。
WAITING / TIMED_WAITING
这两个状态都是线程进入等待状态
区别是: WAITING(无时间限制) / TIMED_WAITING(有时间限制)
wait()方法会让线程进入等待队列
notify()方法会在等待队列中将线程唤醒
join()方法让线程进入等待队列,等目标线程终止
TERMINATED(终止)
当线程执行完毕后,则进入TERMINATED(终止)状态