Java------多线程状态(四)

Java------多线程状态(四)
线程一生有5大状态,分别是:
新生状态
就绪状态
运行状态
阻塞状态
死亡状态
新生状态–start()----就绪状态----获得执行权—运行状态----run方法结束—死亡状态
运行状态----失去执行权----就绪状态
运行状态----wait()—等待阻塞
运行状态-----synchronized----同步阻塞
运行状态-----sleep/join(),I/O流阻塞等-----其他阻塞
等待阻塞----notify()-----同步阻塞
同步阻塞----锁可用----就绪状态
其他阻塞----sleep()休眠时间到,join()联合线程执行完毕,I/O流阻塞结束等-----就绪状态
new Thread();线程对象一旦创建就进入到了新生状态。
当调用start()方法,线程立即进入就绪状态,但是不意味着立即调度执行。
进入运行状态,线程才真正执行线程体的代码块。
阻塞事件解除后,重新进入就绪状态,等待CPU调度执行才进入运行状态。
线程的一旦进入死亡状态,不能再调用start()再次启动线程。
每个线程有自己的工作空间,分别与主内存进行交互。
进入就绪状态的四种方式:
1.start()
2.阻塞解除
3.运行状态中调用yield(),让出cpu,进入就绪状态。
4.jvm自身算法切换至其他线程。
导致阻塞状态的四种方式:都是从运行状态改为阻塞状态
1.sleep 当前线程占用资源
2.wait 当前线程不占用资源
3.join 插队
4.I/O,read、write阻塞,必须通过操作系统调度。
线程方法:
sleep():
1.使线程停止运行一段时间,将处于阻塞状态
2.如果调用sleep方法之后,没有其他等待执行的线程,此时当前线程不会马上恢复执行
join():
1.阻塞指定线程等到另一个线程完成以后再继续执行
yield():
1.让当前正在执行的线程暂停,不是阻塞线程,而是将线程转入就绪状态。
2.调用了yield方法之后,如果没有其他等待执行的线程,此时当前线程会马上恢复执行
setDaemon():
1.可以将指定的线程设置成后台线程,守护线程;
2.创建用户线程的线程结束时,后台线程也随之消亡
3.只能在线程启动之前把它设为后台线程
setPriority(int newPriority) getPriority
1.线程的优先级代表的是概率
2.范围从1到10,默认为5
stop()停止线程
1.不推荐使用

猜你喜欢

转载自blog.csdn.net/cz_chen_zhuo/article/details/121615439