【转】java线程状态(Thread States)

【转】java线程状态(Thread States)

java thread

程序通过调用start()方法启动一个线程,使该线程进入可运行的状态。 使该线程处于运行状态由于的调度会出现不可控性,即不是优先级高的先被调用,可能先调用,也可能后调用的的情况。 运行状态下,调用让步方法yield(),可以使线程回到就绪状态(Runnable)下,再次等待被调度运行(并不依赖优先级)。 线程在运行过程中可能会遇到阻塞情况,例如sleep()调用、Join()等待、同步I/O操作。 当sleep时间片结束、join()中断、I/O操作完成,线程会回到就绪状态。 当处于运行状态的线程遇到对象监视器(Object Monitor)上的同步标记(synchronized)时,则会进入锁定阻塞状态(locked Blocked status)。 线程运行结束(run方法结束)或异常退出(Thread Exception),线程到达终止状态(Terminated / Dead)。 wait() 和sleep() 方法的区别有: 类:两个方法定义于不同的类,前者是根类型java.lang.Object,后者是java.lang.Thread类; 锁:最主要是sleep方法没有释放锁,仍然拥有对象监视器,而wait方法释放了锁,允许其他线程执行该同步块或同步方法; 域:Object.wait应该用在同步方法或者同步控制块中,而Thread.sleep方法可以在任何地方使用; 停:两者都可以让线程暂停一段时间,但本质的区别是:wait处理是线程之间的通讯的问题,而sleep是对线程的运行状态控制。 object.notify() 唤醒一个等待此对象监视器的线程,注意此方法被调用时,并不确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒具体的某个线程,且并不按优先级。 object.notifyAll() 唤醒所有等待此对象监视器的线程,注意并不是给被唤醒的线程一个此对象上的监视器锁(lock),而是让它们竞争这个锁。 【注】 更权威的说法请参照Oracle文档: http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.State.html http://docs.oracle.com/javase/6/docs/api/java/lang/management/ThreadInfo.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值