美文网首页
线程的几种状态

线程的几种状态

作者: 张天偿 | 来源:发表于2017-04-23 20:39 被阅读0次

1.当线程继承Thread或者实现了Runnable创建了线程对象后,当new线程对象过后线程就进入了初始的状态。

2.当线程对象调用了start()方法的时候,线程启动进入可运行的状态。

3.线程进入可运行状态后,如果逻辑完成那么线程将会终结,如果没有执行完毕中间JVM分配时间片用完,将进入可运行状态,一旦线程被JVM选中则立即执行。

4.运行状态的情况比较复杂

第一:线程如果执行run() main()方法结束后,完成逻辑,线程就进入Terminated

第二:当线程调用sleep()或者join()方法就会进入Blocked状态,但是要注意的是阻塞的线程是不释放当前所占有的系统资源,当sleep()结束或者join()等待其他线程来到,当前线程则进入Runnable状态等待JVM分配资源。

第三:当线程进入Runnable状态,但是还没有开始运行的时候,此时发现需要的资源处于同步状态synchronized,这个时候线程将会进入Time waiting,JVM会使用队列对这些线程进行控制,既先进行Time waiting的线程会先得到JVM资源进行执行进入Waiting

第四:如果处于Runnable的线程调用yield()让出JVM资源,那么就会进入New状态和其他New状态线程进行竞争重新进入Runnable

第五:如果当前线程调用wait()方法,则当前线程进入Time waiting但是这个时候当前线程会释放所占有的JVM资源,进入这个状态过后是不能自动唤醒的,必须调用notify()或者notifyAll()方法,线程进入Waiting。

1.首先sleep()是Thread类的方法静态方法,需要通过Thread类调用,Thread.sleep()。而wait()和notify()是Object类中的实例方法,因为java所有类都继承于object类,所有类中都可以使用。

2.wait(),和notify()必须用在synchronized代码块中调用,否则会抛出异常(因为wait()需要释放对象锁,如果不在synchronized代码块中不能保证拥有对象锁)。

3.当在synchronized代码块中使用sleep(),线程会被挂起,但不会释放对象锁,所以如果有其他线程等待执行该synchronized代码块,一直会被阻塞,等待该线程被唤醒释放对象锁。

4.当在synchronized代码块中使用wait(),线程会被挂起,需要notify()唤醒,但该线程会释放对象锁,所以其他线程可以执行该synchronized代码块。

相关文章

  • 2018-09-19多线程的运行状态

    多线程几种状态——

  • 线程的几种状态

    1.当线程继承Thread或者实现了Runnable创建了线程对象后,当new线程对象过后线程就进入了初始的状态。...

  • 线程与线程池总结

    1) 线程的几种状态 ·初始状态:new Thread 进入初始状态 ·可运行状态(就绪状态):调用线程的star...

  • Java线程池

    线程池 new Thread 弊端 线程池的好处? TreadPoolExecutor 线程池的几种状态 初始...

  • 线程状态与方法

    线程状态 对于线程来一般有以下几种状态 1. 创建状态(New) 每次我们新建线程例如,这种线程就处于创建状态 2...

  • java线程状态

    java的线程状态包括以下几种: NEW 线程创建的初始状态。 RUNABLE 线程正在执行。 注意这里是java...

  • Java线程Thread解析

    线程的状态 简单的来说,线程可以分为以下几种状态: 新建 (new) 就绪 (runnable) 运行中 (run...

  • Android基础线程的多种状态

    线程有几种状态,分别是哪些? 1.New,新建状态,当程序new了一个线程后,线程就处于新建状态,此时线程还未启动...

  • 精选30道Java多线程面试题

    ​ 1、线程和进程的区别 2、实现线程有哪几种方式? 3、线程有哪几种状态?它们之间如何流转的? 4、线程中的st...

  • 线程的状态/安全隐患

    线程的状态 线程的几种状态 1.新建线程之后,开启start的那一瞬间:线程对象会进入可调度线程池中 2.star...

网友评论

      本文标题:线程的几种状态

      本文链接:https://www.haomeiwen.com/subject/ipmyzttx.html