JAVA中线程的生命周期

JAVA中线程的六种状态

 

目录

JAVA中线程的六种状态

 

1.new 创建线程

  此时只是java语言层面的创建,操作系统并没有真正的创建线程,只有调用start()方法时,线程进入可运行状态(RUNNABLE)
 

2.RUNNABLE(运行状态)

此状态又包含就绪状态和运行状态,程序调用start()方法后,操作系统会创建一个线程,然后等待cpu调配,此时线程处于就绪状态,当线程获得cpu执行权后,线程进入运行状态。也可以通过yeild()方法,切换到就绪状态。
 

3.TIME_WAITING(限时等待状态)

RUNNABLE状态时,调用sleep(long)、wait(long)、join(long)、LockSupport.partUnit(xx)进入TIME_WAITING。此时可通过notify()、notifyAll()、LockSupport.unpart()方法进次入RUNNABLE状态。
 

4.WAITING(无限等待状态)

RUNNABLE状态时,调用sleep()、wait()、join()、LockSupport.park()进入WAITING。此时可通过notify()、notifyAll()、LockSupport.unpart()方法进次入RUNNABLE状态。
 

 5.BLOCKED(阻塞状态)

RUNNABLE状态时,如果遇到锁被抢占的情况,如果抢不到锁,就会进入BLOCKED状态,当抢占到锁的情况下,又会再次进入RUNNABLE状态。
 

6.TERMINATED(终止状态)

线程运行结束,终止线程有两种方式。stop()强制杀死线程,但是此方法不建议使用,如果强制终止,可能会造成数据不完整。然后就是interrupt()(建议使用),如果线程在WAITING、TIME_WAITING状态,都会try/catch一个InterruptedException e异常,共享变量Thread.currentThread().isInterrupted(),默认是false,当线程调用interrupt()时,会经历一个把变量Thread.currentThread().isInterrupted()值变成true,然后抛出InterruptedException 异常,然后再把变量Thread.currentThread().isInterrupted()复位的过程,如果线程在睡眠中,可以不用等到线程睡醒而直接唤醒线程。此时可以在catch里由线程自己处理结果。
        isInterrupted()标记线程是否被中断
        interrupt()把isInterrupted()从默认值false修改为ture
        interrupted()清除线程的中断状态,即把isInterrupted()修改为默认值false,如果当前线程是中断状态,就清除中断标记,返回true,如果当前线程非中断状态,就返回false

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值