• java 多线程 2 : 线程的生命周期


    线程得生命周期:

      当线程被创建并且启动之后,并不是一启动就进入执行状态,也不是一直处于执行状态,在线程得生命周期中,他要经过创建(New),就绪(Runnable),运行(Running),阻塞(Blocked),和死亡(Dead)。线程启动以后,不能一直霸占CPU独自运行,CPU需  要在多条线程之间切换,线程状态也会多次在运行,阻塞之间切换。

    新建状态:new关键字创建一个线程后,该线程就处于新建状态,此时它和其他的java对象一样,仅仅由java虚拟机为其分配内存,并初始化其成员变量,此时线程对象没有表现任何线程的动态特征,程序也不会执行线程的执行体。

    就绪状态:当线程调用了start()方法之后,该线程处于就绪状态,表示该线程可以运行了,但是并没有开始运行,何时运行取决于jvm里线程调度器的调度。

    public class Thread4 extends Thread{
        
        public void run() {
            for(int i = 0 ; i < 30 ; i++) {
                System.out.println(Thread.currentThread().getName() + "--" + i);
            }
        }
        public static void main(String[] args) {
            new Thread4().run();
            new Thread4().run();
        }
    }

    注意:  启动线程是调用对象的start()方法 , 而不是直接调用run()方法,否则就变成单线程了
         只能对处于新建状态的线程调用start()方法,否则将引起IllegalThreadStateException异常

    运行状态:  处于就绪状态的线程获得了CPU开始执行run()方法的线程执行体,该线程就处于运行状态。
           线程不可能一直在运行状态(除非线程执行体足够短,瞬间执行完成),线程运行过程中需要被中断目的是使其他线程获得执行的机会。线程调度,取决于底层平台所采取的策略。

    阻塞状态:

      当发生如下情况时,线程进入阻塞状态:
          线程调用sleep()方法,主动放弃所占用的处理器资源
          线程调用了一个阻塞式的IO方法,在该方法返回前,该线程被阻塞
          线程试图获得一个同步监视器,但是该监视器正在被其他线程所持有
          线程在等待某个通知(notify)
          程序调用了线程suspend()方法将该线程挂起,但是,这个方法容易造成死锁,应当尽量避免使用该方法

      被阻塞线程的阻塞解除后,必须重新等待线程调度器再次调度它
      针对上面几种情况,当发生如下特定的情况时可以解除上面的阻塞,让该线程重新进入就绪状态
          调用sleep()方法的线程过了指定时间
          线程调用的阻塞式IO方法已经返回
          线程成功的获得了试图取得的同步监视器
          线程正在等待某个通知时,其他线程发出了一个通知
          处于挂起状态的线程调用了resume恢复方法

      yield可以让运行状态的线程,转入就绪状态

    线程死亡:线程会以如下三种方式结束, 结束后就处于死亡状态。
         run()或者call()方法执行完成,线程正常结束
         线程抛出一个没有被捕获的Exception或者Error
         直接调用线程的stop()方法来结束该线程 --该方法容易导致死锁,通常不推荐使用。
      
         当主线程结束,其他线程不会受到任何影响。一旦子线程启动起来之后,它拥有和主线程同样的地位,不会受到主线程的影响。

    isAlive()方法:  就绪,运行,阻塞  返回true;  新建 , 死亡 , 返回false;

    温故而知新
  • 相关阅读:
    黄聪:dreamweaver jquery代码提示安装,DW JQ代码智能提示
    明明白白AOP(你没有理由不心领神会!)
    myeclipse安装svn插件的多种方式
    spring注解
    freemarker入门例子
    MyEclipse10 中的两种FreeMarker插件的安装与配置
    优秀程序员必备的10个技能
    p2psearcher无法连接到KAD网络或ed2k服务器的解决办法
    MyEclipse 8.6.1下载|MyEclipse 8下载|MyEclipse 8.6.1官网下载
    网络技术网站
  • 原文地址:https://www.cnblogs.com/Uzai/p/9667223.html
Copyright © 2020-2023  润新知