JAVA线程模型
我们在JAVA代码中创建一个线程,这线程在系统中会经历下面5个阶段:
New->Runnable->Blocked->Running->Dead
这里我们来详细看一下这几个阶段的演变以及转换
New
表示这个线程对象刚刚被创建,它具备线程的一些特性,但是系统没有给它分配资源。Runnable
表示这个线程处于就绪状态,要是能获得CPU的话,线程马上就能运行起来。Blocked
一个正在运行的线程由于某些原因不能继续运行,它将进入阻塞状态。比如线程对象执行suspend(),sleep()等阻塞类型的方法后,线程就会进入BlockedPool,当线程调用resume()方法或者自动苏醒后,线程会进入Runnable状态;线程因为要执行synchronized同步代码块需要获取锁,但是当前要获取的锁被其他线程所占有,此时线程会进入LockPool,要是线程获取到这把锁后,线程又会进入到Runnable状态;线程执行了某个对象的wait()方法,此时线程会进入到WaitPool,当相应对象上的notify方法被调用后,线程就会进入Runnable状态。Running
处于Runnable状态的线程要是能获取到CPU的话,马上就变成Running状态Dead
线程运行结束,或者线程被interrupt,或者线程被stop,线程的生命周期也就结束了。
JVM在执行某个方法的时候,会创建一个方法执行栈帧(Frame),这个栈帧包含局部变量区和操作数栈,在局部变量区的第一个位置上存储当前方法所属的实例对象。