多线程执行过程(生命周期)

多线程执行过程(生命周期)
在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。
1、新建状态,当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值

2、就绪状态,当线程对象调用了start()方法之后,该线程处于就绪状态。Java虚拟机会为其创建方法调用栈和程序计数器,等待调度运行

3、运行状态,如果处于就绪状态的线程获得了CPU,开始执行run()方法的线程执行体,则该线程处于运行状态

4、阻塞状态,一个正在运行的线程因某些原因不能继续运行时,就进入阻塞 状态。这些原因包括:
a) 当执行了某个线程对象的sleep()等阻塞类型的方法时,该线程对象会被置入一个阻塞集内,等待超时而自动苏醒。
b) 当多个线程试图进入某个同步区域时,没能进入该同步区域的线程会被置入锁定集,直到获得该同步区域的锁,进入就绪状态。
c) 当线程执行了某个对象的wait()方法时,线程会被置入该对象的等待集中,知道执行了该对象的notify()方法wait()/notify()方法的执行要求线程首先获得该对象的锁。

5、死亡状态,run()方法执行结束或异常退出的方式:interrupt()或stop()方法。
线程状态转换图

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java线程的生命周期可以分为以下6个状态: 1. 新建状态(New):当线程对象被创建时,它处于新建状态。此时它还没有被分配到任何CPU时间,也没有开始运行。 2. 就绪状态(Runnable):当线程已经被创建并且调用了 start() 方法后,线程就进入了就绪状态。此时,线程已经分配到了CPU时间,但是它还没有开始执行,需要等待CPU调度。 3. 运行状态(Running):当线程进入就绪状态后,等待CPU调度,一旦分配到CPU时间,线程就进入运行状态。此时,线程开始执行自己的任务。 4. 阻塞状态(Blocked):当线程在运行过程中,遇到了某些阻塞事件(如等待I/O操作,等待获取锁等),就会进入阻塞状态。此时,线程暂停执行,等待阻塞事件结束后,重新进入就绪状态。 5. 等待状态(Waiting):当线程在等待某个条件满足时,它会进入等待状态。此时,线程会释放掉它所持有的所有锁,并进入等待状态,直到条件满足后,再从等待状态进入就绪状态。 6. 终止状态(Terminated):当线程的 run() 方法执行完毕或者调用了 stop() 方法后,线程就进入了终止状态。此时,线程已经完成了它的任务,它所占用的CPU时间和系统资源也已经释放。 ### 回答2: Java线程的生命周期由以下几个阶段组成。 1. 新建(New):当创建一个线程对象时,该线程就处于新建状态。这时候它还没有开始执行。 2. 就绪(Runnable):线程对象开始运行前的状态。即线程对象被创建后,调用start()方法,线程对象就进入了就绪状态。在就绪状态下,线程等待获取CPU时间片来执行任务。 3. 运行(Running):线程被分配到CPU,开始执行任务。在运行状态下,线程会不断执行run()方法内的代码,直到线程终止。 4. 阻塞(Blocked):线程在执行过程中,遇到某些情况(如等待IO操作、等待获取锁、等待唤醒等),导致线程暂停执行,此时线程处于阻塞状态,不会占用CPU时间,进入等待状态。 5. 等待(Waiting):线程通过调用wait()方法,进入等待状态。此时线程会暂停执行,直到其他线程调用notify()或notifyAll()方法唤醒它。 6. 超时等待(Timed Waiting):线程通过调用sleep()、join()或者LockSupport.parkNanos()等方法,指定一个等待时间,使线程进入超时等待状态。在等待时间到达之前,线程暂停执行。 7. 终止(Terminated):当线程完成了它的任务,或者发生了异常导致线程提前终止时,线程进入终止状态。 以上是线程的常见生命周期。在不同的状态之间转换时,可能需要通过调用特定的方法或事件的触发来进行转换。线程的生命周期管理对于多线程编程非常重要,合理地管理线程的状态可以提高程序的性能和可靠性。 ### 回答3: Java线程的生命周期可以分为五个状态:新建(New)、运行(Runnable)、阻塞(Blocked)、等待(Waiting)和终止(Terminated)。 1. 新建状态(New):当我们通过创建Thread类或实现Runnable接口的方式创建一个线程对象时,该线程处于新建状态。这个状态下的线程还没有调用start()方法启动线程。 2. 运行状态(Runnable):当线程调用start()方法后,线程进入运行状态。此时线程会开始执行其内部的run()方法中的代码。 3. 阻塞状态(Blocked):线程在执行过程中,可能会因为某些原因而被阻塞,比如等待IO操作结果或获取锁资源。进入这个状态的线程会暂停执行,直到满足特定条件后才能进入到运行状态。 4. 等待状态(Waiting):线程进入这个状态后会一直等待某个特定条件的满足,而且是被动等待,不能由自己触发退出。常用的等待状态方法有wait()、join()和park()等。 5. 终止状态(Terminated):线程执行完自己的任务后或者发生异常终止后,线程进入终止状态。线程一旦处于终止状态,则不能再次进入到其他状态。 总体来说,Java线程从新建状态开始,通过调用start()方法进入运行状态,可能会经历阻塞、等待状态后,最终进入终止状态。通过合理地控制线程的状态转换,我们可以实现多线程编程的各种操作和功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值