新建 就绪 执行 阻塞 死亡
1.创建 2. 执行 3.销毁 4.时间限制的等待 5.无线等待 6.阻塞
start只能运行1次 就绪状态即可运行状态 未必立刻执行 run()才是运行状态
sleep 不释放锁 使用sleep从执行状态(running)进入阻塞状态(blocked)sleep结束从阻塞状态转回就绪状态wait 释放锁 进入等待队列 wait()阻塞状态 io操作(等待用户输入)也是阻塞状态 join 不释放锁
当某个程序调用其他线程的join()时,调用线程将会阻塞,直到插入的线程运行完毕,才运行该线程
join() B线程想等待A线程结束后再执行 那就再B线程中执行A.join()
join(时间) 只等待这么久 如果A线程没有执行完也不等待了
A线程join()结束 B由阻塞状态进入就绪状态
调用当前线程的yield()方法,礼让给其他线程,但是当前线程并不阻塞 还有可能再次获得cpu,当前线程进入可运行状态
termained死亡就是当run()执行完 或者 main()执行完
参考文章 Java线程的状态及切换