Java多线程经典API
👉 快速开始
最好的Java多线程API讲解点击此处:多线程设计
😆 思考
如果一个线程两次调用start()方法,会出现什么问题?
答:Java中一个线程只能调用一次start()方法,再次调用时会出现 IllegalThreadStateException 异常
✨ 拓展
线程生命周期包括6中状态
1. NEW: 线程被创建,还没有调用start()启动
2. RUNNABLE: 线程可能时正在运行,也可能是在就绪队列中等待操作系统进行调度分配CPU资源
3. BLOCKED: 线程被锁,处于等待解锁状态
4. WAITTING: 线程等待状态,等待wait/notify条件唤醒
5. TIMED_WAIT: 和WAITTING状态相同,只是多了一个超时条件触发
6. TERMINATED: 表示线程执行结束
当我们第一次调用start()方法时,线程状态可能处于中止状态或非NEW状态下的一个其他状态,再次调用start()方法就相当于让这个正在运行的线程再次运行一遍,这不合理,因此源码中在线程调用start()方法时都会先判断线程运行状态,若线程已经运行,则抛异常。
🎠 更多
Java线程生命周期状态图
stateDiagram-v2
[*] --> NEW
NEW-->RUNNABLE :start()
RUNNABLE-->WAITING :wait()
WAITING-->RUNNABLE :notify(),notifyAll()
TIMED_WAITING-->RUNNABLE :sleep()结束
RUNNABLE-->TIMED_WAITING :sleep()开始
RUNNABLE-->TERMINATED :run()结束
TERMINATED --> [*]
BLOCKED-->RUNNABLE :synchronized()
RUNNABLE-->BLOCKED :synchronized()
ps: Java线程周期中没有Running状态,Ready和Running状态被统一归纳入RUNNABLE中
Java多线程经典API
http://example.com/2022/09/16/Java多线程经典API/