Java的六种线程状态

1.new(新建状态)

通过继承Thread、实现Runnable、Callnable接口、创建线程池等方法新建了线程对象,但是还没有调用start()方法;

2.runnable(就绪状态/可执行状态)

细分为两种状态:就绪(ready)和运行中(running)

在创建线程对象后,其他线程调用了该对象的start()方法,该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪(ready)状态。就绪状态的线程在获取CPU时间片后变为运行中(running)状态。

3.blocked(阻塞状态)

线程在获取锁失败时(因为锁被其它线程抢占),它会被加入锁的同步阻塞队列,然后线程进入阻塞(Blocked)状态。

4.wating(等待状态)

处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒,否则会处于无限期等待的状态。

5.timed_wating(限时等待状态)

处于这种状态的线程不会被分配CPU执行时间,不过无须无限期等待被其他线程显示地唤醒,在达到一定时间后它们会自动唤醒。

6.terminated(死亡状态)

当线程的run()方法完成时,或者主线程的main()方法完成时,我们就认为它终止了。这个线程对象也许是活的,但是它已经不是一个单独执行的线程。线程一旦终止了,就不能复生。
在一个终止的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。

 

wati与sleep的区别

wait和sleep方法都能使线程处于等待状态

1.定义

wait方法定义在Object中,基于对象锁,所有的对象都能使用。

sleep方法定义在Thread中,基于当前线程

2.条件

wait必须在同步环境(synchronized方法)下使用,否则会报IllegalMonitorStateException异常,sleep方法可在任意条件下使用

3.功能

wait/notify一起使用,用于线程间通信。wait方法用于让线程进入等待状态,notify则唤醒正在等待的线程。

sleep用于暂停当前线程的执行,它会在一定时间内释放CPU资源给其他线程执行,超过睡眠时间则会正常唤醒。

4.锁的持有

在同步环境中调用wait方法会释放当前持有的锁

调用sleep则不会释放锁,一直持有锁(直到睡眠结束)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值