1.就绪 (new)
线程对象已建立,但还启动,所以还不能运行。
2.就绪(Runnable)
线程对象调用starte方法后进入此状态。进入这个状态并不意味着在执行,它可能被阻塞或正执行。只要调度程序分给时间给线程,它就可以运行。
3.死亡(Dead)
死亡线程通常方式是从run方法返回。
4.阻塞(Blocked)
线程能够运行,但某个条件阻止他的运行,当线程进入阻塞状态时,调度机制将忽略该线程,不再分配给线程任何处理时间。直到进入就绪状态,它才有执行的机会。
线程阻塞:
当一个线程被阻塞时,可能有如下原因:
1.调用sleep方法
2.调用wait让线程挂起,知道notify或notifAll方法才让它进入就绪状态。
3.线程在等待某个输入/输出完成。
4.线程试图在某个对象上调用其同步控制方法,但是对象锁不可能。
sleep和wait
1.调用sleep的时候,锁并没有被释放,调用wait方法,线程被挂起,锁被释放了。
2.wait、notify、notifyall是基类Object的一部分,sleep是Thread类的一部分。
线程对象已建立,但还启动,所以还不能运行。
2.就绪(Runnable)
线程对象调用starte方法后进入此状态。进入这个状态并不意味着在执行,它可能被阻塞或正执行。只要调度程序分给时间给线程,它就可以运行。
3.死亡(Dead)
死亡线程通常方式是从run方法返回。
4.阻塞(Blocked)
线程能够运行,但某个条件阻止他的运行,当线程进入阻塞状态时,调度机制将忽略该线程,不再分配给线程任何处理时间。直到进入就绪状态,它才有执行的机会。
线程阻塞:
当一个线程被阻塞时,可能有如下原因:
1.调用sleep方法
2.调用wait让线程挂起,知道notify或notifAll方法才让它进入就绪状态。
3.线程在等待某个输入/输出完成。
4.线程试图在某个对象上调用其同步控制方法,但是对象锁不可能。
sleep和wait
1.调用sleep的时候,锁并没有被释放,调用wait方法,线程被挂起,锁被释放了。
2.wait、notify、notifyall是基类Object的一部分,sleep是Thread类的一部分。