线程的状态 妖狐艹你老母 2021-12-19 00:21 373阅读 0赞 线程共有六种状态 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h3MTIwMjE5_size_16_color_FFFFFF_t_70] 1. 初始状态 实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了初始状态。 2.1. 就绪状态 就绪状态只是说你资格运行,调度程序没有挑选到你,你就永远是就绪状态。 调用线程的start()方法,此线程进入就绪状态。 当前线程sleep()方法结束,其他线程join()结束,等待用户输入完毕,某个线程拿到对象锁,这些线程也将进入就绪状态。 当前线程时间片用完了,调用当前线程的yield()方法,当前线程进入就绪状态。 锁池里的线程拿到对象锁后,进入就绪状态。 2.2. 运行中状态 线程调度程序从可运行池中选择一个线程作为当前线程时线程所处的状态。这也是线程进入运行状态的唯一一种方式。 1. 阻塞状态 阻塞状态是线程阻塞在进入synchronized关键字修饰的方法或代码块(获取锁)时的状态。 2. 等待 处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒,否则会处于无限期等待的状态。 3. 超时等待 处于这种状态的线程不会被分配CPU执行时间,不过无须无限期等待被其他线程显示地唤醒,在达到一定时间后它们会自动唤醒。 4. 终止状态 当线程的run()方法完成时,或者主线程的main()方法完成时,我们就认为它终止了。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦终止了,就不能复生。 在一个终止的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。 1.创建新线程并调用start方法,线程进入runnable(可运行)状态,如果抢占到cpu资源,线程进入running(运行)状态。 2.线程进入可运行状态有五种情况 1.调用sleep方法超过指定休眠时间 2.线程调用的阻塞io已经返回,阻塞方法执行完毕 3.线程获得了试图同步的监视器 4.线程正在等待通知,其他线程发出通知 5.处于挂起状态的线程调用了resume方法 3.线程处于阻塞状态,也称暂停状态或blockec,blocked结束后,进入runnable状态,等待系统重新分配资源 1.线程调用sleep 2.线程调用阻塞io 3.试图获得同步监视器 4.线程等待某个通知 5.调用了suspend方法,此方法容易死锁,尽量避免 同步监视器:简单来说,监视器用来确保同一时间只能有一个线程可以访问特定的数据和代码。 run方法结束后进入销毁阶段 每个锁对象都有两个队列,一个是就绪,一个是阻塞,就绪队列存储将要得到锁的线程。一个线程被wait后,就进入阻塞队列。 重要的特性方法 1.sleep方法不会释放锁,sleep是Thread类的方法,wait是Object的方法。 2.wait方法会释放锁,wait(long)是等待某一时间内是否有线程对锁进行唤醒,如果超过这个时间自动唤醒 3.nodify方法不会释放锁,并且只能随机唤醒一个线程 wait/notify模式有两种情况会造成程序逻辑混乱 1.执行wait的条件发生改变 2.线程执行notify的时候,需要被唤醒的线程还有执行wait [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h3MTIwMjE5_size_16_color_FFFFFF_t_70]: /images/20211219/f4d6daaf22bc4020ad9ad95a51e8ce15.png
相关 线程的状态 在Java中线程共分为6中状态: 1. NEW:创建好一个Java的Thread对象,并安排好了任务,没有调用start()方法,和PCB没有关系 1. RUNNABL 缺乏、安全感/ 2024年03月30日 14:38/ 0 赞/ 70 阅读
相关 线程状态和线程池状态 线程状态 有六种状态; 新创建(NEW) 可运行(Runnable) 锁阻塞(Blocked) 无线等待(Waiting) 计时等待(Timed Wa 桃扇骨/ 2023年10月06日 14:08/ 0 赞/ 41 阅读
相关 线程的状态 ![在这里插入图片描述][2d280b0176ba4be2ae9f37daba7f7c5d.gif_pic_center] 文章目录 一、线程的所有状态 二 ﹏ヽ暗。殇╰゛Y/ 2023年09月27日 13:09/ 0 赞/ 124 阅读
相关 线程的状态 我百度了一下,有说三种,有说四种,有说五种,有说六种,还有说七种。下边列出六种的说法,六种见的比较多。 这是线程的六种状态 1. 初始(NEW):新创建了一个线程对象, 墨蓝/ 2023年06月07日 05:37/ 0 赞/ 20 阅读
相关 线程的状态 线程的状态 在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态,这个将会有助于后面对Thread类中的方法的理解。 线程从创建到最终的消亡,要 Dear 丶/ 2022年09月24日 14:22/ 0 赞/ 193 阅读
相关 线程的状态 要想实现多线程,必须在主线程中创建新的线程对象。任何线程一般具有5种状态, 即 创建、就绪、运行、阻塞、终止。线程状态的转移与方法之间的关系如图所示 ![这里写图片描述][ 心已赠人/ 2022年07月21日 02:49/ 0 赞/ 223 阅读
相关 线程的状态 线程对象在不同的运行时期有不同的状态,状态信息就存在于State枚举类中, \ public static enum Thread.State extends En 秒速五厘米/ 2022年06月08日 00:46/ 0 赞/ 219 阅读
相关 线程的状态 Thread源码里定义了6种状态,如下: \ A thread state. A thread can be in one of the follo 川长思鸟来/ 2022年02月15日 13:47/ 0 赞/ 265 阅读
相关 线程的状态 线程共有六种状态 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9 妖狐艹你老母/ 2021年12月19日 00:21/ 0 赞/ 374 阅读
相关 线程的状态 RUNNABLE这个名字很具有欺骗性,很容易让人误以为处于这个状态的线程正在运行。事实上,这个状态只是表示,线程是可运行的。我们已经无数次提到过,一个单核CPU在同一时刻... 朱雀/ 2020年05月12日 15:57/ 0 赞/ 907 阅读
还没有评论,来说两句吧...