`
小余不多余
  • 浏览: 3754 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

线程的五大状态

    博客分类:
  • java
阅读更多

 线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。



    1.新建状态(New): 
        当用new操作符创建一个线程时, 例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码

     2.就绪状态(Runnable)

        一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态。

        处于就绪状态的线程并不一定立即运行run()方法,线程还必须同其他线程竞争CPU时间,只有获得CPU时间才可以运行线程。因为在单CPU的计算机系统中,不可能同时运行多个线程,一个时刻仅有一个线程处于运行状态。因此此时可能有多个线程处于就绪状态。对多个处于就绪状态的线程是由Java运行时系统的线程调度程序(thread scheduler)来调度的。

    3.运行状态(Running)

        当线程获得CPU时间后,它才进入运行状态,真正开始执行run()方法.

    4. 阻塞状态(Blocked)

        线程运行过程中,可能由于各种原因进入阻塞状态:
        1>线程通过调用sleep方法进入睡眠状态;
        2>线程调用一个在I/O上被阻塞的操作,即该操作在输入输出操作完成之前不会返回到它的调用者;
        3>线程试图得到一个锁,而该锁正被其他线程持有;
        4>线程在等待某个触发条件;
        ......           

        所谓阻塞状态是正在运行的线程没有运行结束,暂时让出CPU,这时其他处于就绪状态的线程就可以获得CPU时间,进入运行状态。

    5. 死亡状态(Dead)

        有两个原因会导致线程死亡:
        1) run方法正常退出而自然死亡,
        2) 一个未捕获的异常终止了run方法而使线程猝死。
        为了确定线程在当前是否存活着(就是要么是可运行的,要么是被阻塞了),需要使用isAlive方法。如果是可运行或被阻塞,这个方法返回true; 如果线程仍旧是new状态且不是可运行的, 或者线程死亡了,则返回false.

分享到:
评论

相关推荐

    28线程五大状态1

    【标题】:“28线程五大状态1” 【描述】:描述中提到的内容与线程状态和 Redis 相关,但未直接提及 Redis 的线程模型。线程的状态包括新生、就绪、阻塞、运行和消亡,这些是操作系统中线程的基本生命周期阶段。 ...

    MFC多线程的创建,包括工作线程和用户界面线程

    #### 五、线程消息传递 在多线程环境中,线程间通信非常重要。MFC提供了 `PostThreadMessage` 函数来发送线程消息,其原型如下: ```cpp BOOL PostThreadMessage( UINT message, WPARAM wParam, LPARAM lParam ...

    线程池顶层实现原理之线程模型,状态,执行流程,原理

    线程池的状态有五种:RUNNING、SHUTDOWN、STOP、TIDYING 和 TERMINATED。 * RUNNING(111):接受新任务、可以处理已添加的任务。 * SHUTDOWN(000):不接受新任务、可以处理已添加的任务。 * STOP(001):不接受...

    Java多线程知识点总结

    在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)和死亡状态(Dead)。了解这些状态对于掌握Java多线程编程至关重要。 新建...

    VC多线程例程五及图解文档(工作者线程)

    本资源“VC多线程例程五及图解文档(工作者线程)”深入探讨了如何在Visual C++中创建和管理工作者线程,以实现并发处理。 工作者线程,也称为后台线程,是在应用程序中执行非用户界面任务的线程。它们不直接与用户...

    多线程+售票案例.docx

    2. 线程状态:线程有五种状态:新建状态、就绪状态、运行状态、阻塞状态、死亡状态。 3. 并发性:多个线程可以在单个处理器上并发执行,多个线程之间不会互相影响。 多线程的创建 ---------------- 多线程可以通过...

    java多线程的讲解和实战

    每个线程都有自己的生命周期,包括新建、就绪、运行、阻塞和结束五个状态。 2. **创建线程的方式**: - 继承`Thread`类:创建一个新的类,继承自`Thread`,重写`run()`方法,然后创建该类的实例并调用`start()`...

    多线程的运用e语言多线程 e多线程

    6. 线程管理:监控线程状态,如等待、挂起、恢复、终止等。 三、线程同步与通信 在多线程环境中,数据共享可能会引发数据不一致问题,因此需要同步机制来保证数据的安全性。E语言中可能提供以下同步原语: 1. 锁...

    C++多线程编程入门教程

    五、线程环境 线程存在于进程之中,进程内的所有全局资源对于内部每个线程都是可见的。进程内典型的全局资源有代码区、静态存储区和动态存储区。线程内典型的局部资源有本地栈空间和部分寄存器变量。 六、多线程...

    JAVA线程高级-线程按序交替执行

    - 线程有新建、就绪、运行、阻塞和死亡五种状态。了解这些状态有助于理解线程的执行流程。 - `Thread.sleep()`方法可以使当前线程进入阻塞状态,到指定时间后自动恢复。 - `join()`方法让调用的线程等待目标线程...

    java关于线程的实验代码

    在Java编程中,线程是程序执行的独立路径,它允许多个任务同时进行,极大地提高了程序的效率和响应性。本实验代码基于《Java大学教程(第三版)》中的线程相关课题,旨在帮助学习者深入理解Java线程的概念、创建与...

    java线程实例 各种小Demo

    Java线程有五种状态:新建、可运行、运行、阻塞和终止。可以通过Thread类的getState()方法查看线程状态。线程的控制包括: - sleep():使当前线程进入休眠状态,指定时间后自动唤醒。 - join():让当前线程等待另一...

    多线程demo/java多线程练习

    - **生命周期**:线程有新建、就绪、运行、阻塞和死亡五种状态。了解这些状态以及如何在它们之间转换是理解多线程的关键。 - **线程同步**:为了避免线程间的竞态条件,Java提供了`synchronized`关键字,它可以...

    精通java多线程

    Java多线程是Java编程语言中的一个重要特性,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在现代计算机系统中,多核处理器的普及使得多线程技术成为提升性能的关键手段。本篇将深入探讨Java多线程...

    JAVA网络编程及多线程

    多线程是现代编程语言中的一项重要技术,特别是在Java这样的面向对象语言中,多线程能够极大提高程序的性能和响应速度。线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。 ...

    Java线程 高级使用

    #### 五、高级线程管理技巧 - **线程池**:通过使用`ExecutorService`等接口实现的线程池来管理线程的生命周期,可以有效地复用线程,减少线程创建和销毁的成本。 - **FixedThreadPool**:固定大小的线程池。 - *...

    Java多线程的总结

    线程有新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)五个状态。理解这些状态有助于我们更好地控制线程的行为,例如,通过调用sleep()方法可以使线程进入阻塞状态,join()...

    c++ builder 多线程

    ### 五、线程生命周期管理 1. **启动线程**: 通过调用`Resume`方法启动线程。 2. **等待线程结束**: 使用`WaitFor`或`TerminateThread`方法来等待或强制结束线程。 3. **清理资源**: 线程结束时,记得释放占用的...

    关于线程(java)两天的课件

    Java线程有五种基本状态:新建(New)、可运行(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)。这些状态之间的转换是通过调用特定的方法,如start()、sleep()、join()、wait()、notify()等...

Global site tag (gtag.js) - Google Analytics