A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hdsjsql 中级黑马   /  2013-4-19 09:23  /  1533 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hdsjsql 于 2013-4-20 14:54 编辑

线程在被创建和运行两个状态间是否还存在临时阻塞状态。

线程状态.png (94.82 KB, 下载次数: 5)

线程状态.png

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

4 个回复

倒序浏览
一个线程有4种状态,任何一个线程肯定处于这4中状态中的一种。
1,初始状态:当线程对象被建立之后,并在调用start()方法之前。此时线程处于初始状态。
    这时线程对象已经产生,但是没被启动。此时可调用start()启动线程和stop()方法停止线程。
2,可执行状态:当线程对象调用start方法后,线程就转入可执行状态。当有多个线程处于可执行状态时,
    这些线程都一个线程池中,排程器会按照先后顺序排列它们,当有CPU资源时,排程器会依次启动这些线程。
    所以,处于可执行状态的线程可能在它正在执行,也可能在线程池中等待。
3,阻塞状态:如线程对象调用wait()方法后,线程就处于阻塞状态。
    此时排程器会忽略它,不对它进行排程。由阻塞状态可以通过resume()方法恢复多可执行状态,它有可能重新执行。
4,退出状态:当一个线程正常结束或调用stop()方法。这个线程就退出了

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 先小涛 于 2013-4-19 15:03 编辑

java中,每个线程都需经历新生、就绪、运行、冻结和死亡五种状态,线程从新生到死亡的状态变化称为生命周期。用new运算符和Thread类或其子类建立一个线程对象后,该线程就处于新生状态。
新生(被创建)--->就绪:通过调用start()方法  
就绪(临时状态,说就绪更准确点)--->运行:处于就绪状态的线程一旦得到CPU,就进入运行状态并自动调用自己的run()方法
运行--->冻结:处于运行状态的线程,执行sleep()方法,或等待I/O设备资源,让出CPU并暂时中止自己运行,进入阻塞状态
冻结--->就绪:睡眠时间已到,或等待的I/O设备空闲下来,线程便进入就绪状态,重新到就绪队列中等待CPU。当再次获得CPU时,便从原来中止位置开始继续运行。
运行--->死亡(1)(正常情况下)线程任务完成
                    (2)(非正常状况)线程被强制性的中止,如通过执行stop()或destroy()方法来终止一个线程

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
线程的五种常见状态

         1.线程被创建。--------调用线程类(Thread的子类)的构造函数,创建线程对象。

          2.准备状态。----------调用线程对象的start()方法,开启线程。多个线程间相互争夺获取计算机资源。


          3.运行状态。----------线程争夺获取了计算机资源后,线程对象的run()方法中的代码被执行,线程处于运行状态。

          4.线程休息状态。----------调用线程对象的sleep(long millis)方法,使线程处于休息状态。(休息状态下的线程不会争夺获取计算机资源,所以线程对象的run()方法中的代码不会被执行)休息的时间为 mills毫秒。时间过后,线程会自动转换为准备状态。

                                         -----------调用线程对象的wait()方法,也能使线程处于休息状态。但是线程不会自动转换为准备状态,要使用线程对象的notify()方法来转换。

          5.线程被结束。----------调用对象的stop()方法结束线程,该方法已经过时,不建议使用。

                                     ----------当run()方法中的代码执行完后线程会自动结束。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马