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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaoxiaofeng 中级黑马   /  2014-8-5 08:10  /  1235 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程有那几个状态?状态之间是怎么转换的?

7 个回复

正序浏览
线程的运行状态有五种:(分法各有不同,不过基本是这样的。)
一,创建:(获得执行资格)
            创建一个线程,如Thread thread = new Thread();

二,运行:(有执行资格,有执行权)
           调用start()分法开启线程。如:thread.start();
三,冻结:(没有执行资格,没有执行权)
          1,调用了sleep(long time)分法,休眠,放弃执行权;如:thread.sleep(15);
          2,调用wait(),方法使线程等待,放弃执行权;如:thread.wait();   
四,阻塞:(有执行资格,没有执行权)
          1,当线程休眠时间到,或者等待线程被notify,notifyAAll分法唤醒时,不会立即执行,此时是获得执行资格,没有执行权。处于排队状态。
         
五,消亡:(线程消失)
          1,调用stop()方法,是线程停止。此方法已经过时。因为该方法存在固有的安全问题。
          2,线程的run方法执行完毕,线程结束。
          3,由于stop()方法有问题,已经没有用了。则要是线程停止的唯一方式是是run方法执行完。
               若果线程一直有执行资格和执行权,则会当线程将run方法执行完毕后就结束。
               因为多线程中要在同步时,循环判断锁,所有只要控制了循环就能控制run方法。
               为了防止线程由于处于冻结状态,一般会使用interrupt()方法来清楚冻结状态。
               使线程继续执行run方法,以结束线程,释放资源。
         
回复 使用道具 举报
好吧,我是来学习的
回复 使用道具 举报
据我的了解,多线程应该有创建状态,可运行状态,运行状态,阻塞状态,消亡状态。可利用wait,notify进行线程之间的通行。
回复 使用道具 举报
线程状态有5种。这里的重点我认为在,有没有执行权和执行资格。
回复 使用道具 举报

我做了张图 你看一下吧 线程间通信的

评分

参与人数 1黑马币 +5 收起 理由
fantacyleo + 5 WOW,这图太漂亮了

查看全部评分

回复 使用道具 举报
我也是问的别人

java中,每个线程都需经历新生、就绪、运行、阻塞和死亡五种状态,线程从新生到死亡的状态变化称为生命周期。用new运算符和Thread类或其子类建立一个线程对象后,该线程就处于新生状态。  

新生--->就绪: 通过调用start()方法   

就绪--->运行: 处于就绪状态的线程一旦得到CPU,就进入运行状态并自动调用自己的run()方法   

运行--->阻塞: 处于运行状态的线程,执行sleep()方法,或等待I/O设备资源,让出CPU并暂时中止自己运行,进入阻塞状态  

阻塞--->就绪: 睡眠时间已到,或等待的I/O设备空闲下来,线程便进入就绪状态,重新到就绪队列中等待CPU。当再次获得CPU时,便从原来中止位置开始继续运行。   

运行--->死亡: (1)(正常情况下)线程任务完成              
                       (2)(非正常状况)线程被强制性的中止,如通过执行stop()或destroy()方法来终止一个线程
回复 使用道具 举报
实现线程有两种 继承Thread类或者实现Runnable接口... 实现同步也有两种,一种是用同步方法,一种是用同步块.. 同步方法就是在方法返回类型后面加上synchronized, 比如:
public void synchronized add(){...}
同步块就是直接写:synchronized (这里写需要同步的对象){...}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马