欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java 线程之线程状态

程序员文章站 2022-04-14 21:50:04
等待状态(WAITING): 一个处于运行状态的线程还可能调用wait()方法、该方法会使调用的线程释放对象锁释,所以线程将进入等待获取锁的队列里面。join() 方法同理,join()方法底层使用的wait(),只不过Join()方法作用于当前执行的线程中。通过调用notify()或notifyA... ......

thread 类中的线程状态:

 public enum state {
        new,//新建
        runnable,// 执行态
        blocked, //等待锁(在获取锁的池子里)
        waiting,//等待状态
        timed_waiting,//定时等待
        terminated; //终止 
}

java 线程之线程状态

创建状态(new):当一个线程创建以后,就处于创建状态。thread   th= new thread(()->{ });

等待锁(blocked):当线程调用 th.start() 方法,表明该线程具备获取锁的资格,进入等待锁的池子中。

可运行状态:当线程 th 获取到锁之后就进入该状态(该状态并不存在thread 类中,但是操作系统是否执行线程,是根据是否分配时间片来决定的)。

执行态(runnable):当可运行态的线程 th 获取到cpu的时间片以后就进入执行。

终止态(terminated):线程执行完毕,或者出现异常。

阻塞状态:在 thread 源码里没有改状态但是在《操作系统原理》中线程是存在该状态的。阻塞态的线程是没有释放自己本身持有的锁(例如线程运行时需要外部i/o资源,打印机、调用sleep()方法。)只是由于外部提出了干预,等外部事件执行完毕后,可直接进入可运行状态。

等待状态(waiting): 一个处于运行状态的线程还可能调用wait()方法、该方法会使调用的线程释放对象锁释,所以线程将进入等待获取锁的队列里面。join() 方法同理,join()方法底层使用的wait(),只不过join()方法作用于当前执行的线程中。通过调用notify()或notifyall()这两个方法来唤醒线程然后进入锁池状态。进入锁池状态以后继续参与锁的竞争。

定时等待状态(timed_waiting):调用 带参数的wait(long num) 方法。该方法等定时一到自动会唤醒线程然后进入锁池状态。进入锁池状态以后继续参与锁的竞争。

挂起状态:当一个处于运行状态的线程调用了suspend()方法以后,它就会进入挂起状态(这一方法已经过时不建议使用)。挂起状态的线程也没有释放对象锁,它需要调用resume()方法以后才能恢复到可运行状态。将线程挂起容易导致程序死锁。