java线程的六个状态

来源:互联网 发布:淘宝挂钩 编辑:程序博客网 时间:2024/06/05 00:16

在java的API中线程的六个状态:









1.新建状态(new):使用new创建一个线程对象,仅仅在堆内存中分配一个内存空间(和普通的创建对象一样),在调用start方法之前,在此状态下,线程没有启动,只是一个普通的线程对象。

Thread t=new Thread();//新建状态


当在新建状态下,线程对象调用start方法,从新建状态进入可运行状态。
线程对象的start方法只能调用一次,否则报错。


2.可运行状态(runnable):分成两种状态:
(1)就绪状态:线程对象调用start()方法之后,等待JVM的调度(此时线程没有运行)
      (2)运行状态:此时线程获得JVM的调度,如果存在多个CPU,那么允许多个线程并行运行;若只有一个,其他线程只能等待。
3.阻塞状态(blocked):正在运行的线程因为某些原因放弃CPU,暂时停止运行,就会进入阻塞状态。
进入阻塞状态后,JVM不会再给该线程分配CPU,直到线程重新进入就绪状态,才有机会进入运行状态
阻塞状态只能先进入就绪状态,不能直接进入运行状态
两种阻塞:
(1)当A线程处于运行过程中,试图要获取同步锁时,这时却被B线程获取了同步锁,此时JVM会把A存到对象的锁池中,A进入阻塞状态。
(2)当线程处于运行过程中,在此过程中有IO请求,此时线程进入阻塞状态,执行IO命令
4.等待状态(waiting):(无时限等待)处于等待状态的线程只能被其他线程唤醒。
当线程在运行过程中,调用了wait方法,此时线程处于等待状态,JVM将当前线程存入对象等待池中,等待被唤醒后进入就绪状态,等待被JVM再次调度。
5.计时等待状态(timed waiting):(使用带参数的wait和sleep方法,有时限等待)
(1)当线程在运行过程中,调用了wait(long time)方法,此时JVM把当前线程存入对象等待池中。
(2)当前线程执行了sleep(long time)方法


6.终止状态(terminated):表示线程终止,一旦终止,不能再重新启动
(1)正常执行完run方法,退出(正常死亡)
(2)遇到异常退出(程序中断)。(意外死亡)

##isAlive():判断当前线程是否还活着


在Thread类中过时的方法(因存在线程安全,强烈禁止使用):
void suspend():暂停线程
void resume():回复线程
void stop():结束当前线程

线程生命周期结束后,但对象还存在,等待垃圾回收器回收。





原创粉丝点击