线程的生命周期及五种基本状态
2020-12-13 02:10
标签:执行 cup lock notifyall 中断 实现 support catch 16px 我们知道线程是操作系统能够进行运算调度的最小单位,在java中的线程其实就是对操作系统的中的线程进行了封装。 我们今天就来说说Java线程的生命周期,也就线程的生老病死!
Java的线程生命周期有六种状态: New(初始化状态) Runnable(就绪状态) Running(运行状态) Blocked(阻塞状态) Terminated(终止状态) 1.New(初始化状态):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 2.Runnable(就绪状态):当调用线程对象的start()方法,线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了start()此线程立即就会执行; 3.Running(运行状态):当就绪状态中的线程获得了CUP执行资源,执行run()中的代码,这样的线程我们称为运行状态的线程。 4.Blocked(阻塞状态):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才有机会再次被CPU调用以进入到运行状态。线程的阻塞状态分为两种: 第一种,Waiting(无时间限制的等待状态): 这个状态下是不能分配CPU执行的。有三种情况会使得Running状态到waiting状态 第二种,Timed_Waiting(有时间限制的等待状态): 其实这个状态和Waiting就是有没有超时时间的差别,这个状态下也是不能分配CPU执行的。有五种情况会使得Runnable状态到waiting状态。 5.Terminated(终止状态):在我们的线程正常run结束之后或者run一半异常了就是终止状态! 注意有个方法Thread.stop()是让线程终止的,但是这个方法已经被废弃了,不推荐使用,因为比如你这个线程得到了锁,你stop了之后这个锁也随着没了,其它线程就都拿不到这个锁了!这不玩完了么! 所以推荐使用interrupt()方法。 interrupt()会使得线程Waiting和Timed_Waiting状态的线程抛出 interruptedException异常,调用interrupt()方法后,使得Running状态的线程再调用wait()、sleep()、jion()方法时抛出interruptedException异常,需要在catch中处理线程异常后的问题。 如果Running状态的线程没有阻塞在I/O状态的话,那只能主动检测自己是不是被中断了,使用isInterrupted()。 线程的生命周期及五种基本状态 标签:执行 cup lock notifyall 中断 实现 support catch 16px 原文地址:https://www.cnblogs.com/codebj/p/11027113.html