更多多线程相关知识点详见个人主页【多线程相关】专栏
线程生命周期
线程的7种生命周期状态
- New(新建)
- 创建完但是还没有调用
start()方法
- 创建完但是还没有调用
- Runnable(可运行/就绪)
- 调用了
start()方法后,等待CPU时间片时
- 调用了
- Running(运行中)
- 线程获得CPU资源并实际执行代码的状态
- Blocked(阻塞)
- 当一个线程试图获取某个锁对象,而该锁已经被其他线程占用时,当前线程就会进入Blocked状态
- Waiting(等待)
- 线程处于无限期等待另一个线程执行特定动作的状态。例如,通过调用
Object.wait()等方法
- 线程处于无限期等待另一个线程执行特定动作的状态。例如,通过调用
- Timed Waiting(计时等待)
- 类似于Waiting状态,不过有超时限制。比如通过
Thread.sleep(long millis)、Object.wait(long timeout)等方法
- 类似于Waiting状态,不过有超时限制。比如通过
- Terminated(终止)
- 线程已经完成执行或者因为异常退出了run()方法
指定状态间的转换
New到Runnable
调用线程对象上的start()方法,标志着线程调度器现在可以安排这个线程执行
Runnable到Running
线程得到CPU时间片并开始执行
Running到Runnable
当前运行中的线程的时间片用完
Running到Blocked
当线程尝试访问一个已被其他线程锁定的对象,且无权获得该对象时
Blocked到Runnable
当线程获得对应权限,可以访问到想要访问的对象时
Running到Waiting
线程调用wait()方法时
Waiting到Runnable
线程被notify()或notifyAll()方法唤醒时
Running到Timed Waiting
线程调用sleep()方法时
Timed Waiting到Runnable
sleep()方法的时间片用完时
Running到Terminated
当线程完成了其run()方法的所有指令时,或者抛出了未捕获的异常时

被折叠的 条评论
为什么被折叠?



