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/
作者
HuangHao
发布于
2022年9月16日
许可协议