线程的状态转换

  1. 新建状态:新创建了一个线程对象。
  2. 就绪状态:线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。
  3. 运行状态:就绪状态的线程获取了CPU,执行程序代码。
  4. 阻塞状态:阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:

    (1)等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。

    (2)同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

    (3)其它阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

  5. 死亡状态:线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
时间: 2024-10-06 09:01:22

线程的状态转换的相关文章

java 22 - 18 多线程之 线程的状态转换、线程组

线程的状态转换图解:..博客暂时不能上传图片 线程的线程组: 线程组: 把多个线程组合到一起.    它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制. 首先创建一个Runnable的实现类 public class MyRunnable implements Runnable { public void run() { for(int x = 0; x < 10 ; x++){ System.out.println(x); } } } 先看看默认状态下,线程都会保存在哪个线程

2.线程的状态转换以及基本操作

在上一篇文章中并发编程的优缺点谈到了为什么花功夫去学习并发编程的技术,也就是说我们必须了解到并发编程的优缺点,我们在什么情况下可以去考虑开启多个线程去实现我们的业务,当然使用多线程我们应该着重注意一些什么,在上一篇文章中会有一些讨论.那么,说了这么多,无论是针对面试还是实际工作中作为一名软件开发人员都应该具备这样的技能.万事开头难,接下来就应该了解如何新建一个线程?线程状态是怎样转换的?关于线程状态的操作是怎样的?这篇文章就主要围绕这三个方面来聊一聊. 1. 新建线程 一个java程序从main

多线程总结二:线程的状态转换

转自:http://zy19982004.iteye.com/blog/1626916 一.线程的状态图 二.初始状态 实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了初始状态 三.可运行状态 可运行状态只是说你资格运行,调度程序没有挑选到你,你就永远是可运行状态. 调用线程的start()方法,此线程进入可运行状态. 当前线程sleep()方法结束,其他线程join()结束,等待用户输入完毕,某个线程拿到对象锁,这些线程也将进入可运行状态. 当前线

Java多线程及线程状态转换

Java实现多线程的方法有两种,一是继承Thread类.二是实现Runnable接口. 一.继承Thread类 public class ThreadTest extends Thread { @Override public void run() { System.out.println("this thread name is:"+Thread.currentThread().getName()); } /** * @param args */ public static void

线程的状态和生命周期

http://blog.csdn.net/lonelyroamer/article/details/7949969 线程的状态转换: 1.新建状态用new Thread()建立一个线程对象后,该线程对象就处于新生状态. 2.就绪状态通过调用线程的start方法进入就绪状态(runnable).注意:不能对已经启动的线程再次调用start()方法,否则会出现Java.lang.IllegalThreadStateException异常.处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处

线程生命状态

线程的状态转换: 1.新建状态用new Thread()建立一个线程对象后,该线程对象就处于新生状态. 2.就绪状态通过调用线程的start方法进入就绪状态(runnable).注意:不能对已经启动的线程再次调用start()方法,否则会出现Java.lang.IllegalThreadStateException异常.处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列(就绪池),等待系统为其分配CPU.Note:如果希望子线程调用start()方法后立即执行,可以使用

Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select poll epoll udp组播 线程池

[本文谢绝转载原文来自http://990487026.blog.51cto.com] Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select  poll  epoll udp组播 线程池 TCP 11种状态理解: 1,客户端正常发起关闭请求 2,客户端与服务端同时发起关闭请求 3,FIN_WAIT1直接转变TIME_WAIT 4,客户端接收来自服务器的关闭连接请求 多路IO转接服务器: select模型 poll模型 epoll模型 udp组播模型 线

Java中的线程状态转换和线程控制常用方法

Java 中的线程状态转换: [注]:不是 start 之后就立刻开始执行, 只是就绪了(CPU 可能正在运行其他的线程). [注]:只有被 CPU 调度之后,线程才开始执行, 当 CPU 分配给你的时间片到了, 又回到就绪状态, 继续排队等候. 线程控制的基本方法: isAlive(): 判断线程是否还活着, start 之后,终止之前都是活的; getPriority(): 获得线程的优先级数值; setPriority(): 设置线程的优先级数值(线程室友优先级别的);   Thread.

11.11-全栈Java笔记:线程状态转换和任务定时调度

线程状态转换 1)New :创建好线程对象,但没有启动的时候. 一个线程调用start()之后不一定会马上启动,此时进入就绪状态,等待得到资源. 2)就绪线程序通过Scheduler(调度程序)去确定是否运行. 3)Runing---dead:运行结束(非双向,为单向箭头). 4)Runing---就绪:暂停(除了没有CPU,具备运行的所有条件). 5)Runing-otherwise(阻塞):因程序原因:调用sleep或join之后,线程被阻塞.这时不具备运行的条件,此时线程进入阻塞池.sle