zoukankan      html  css  js  c++  java
  • 浅谈线程的方法和状态

    Thread方法和状态:

    插曲

    说到了线程顺便说一下上学时候我搞不清的问题————线程和进程之间的关系

    一个程序运行至少需要一个进程,而一个进程至少需要一个线程,所以线程–>进程–>程序。线程是程序执行流的最小单位,而进程是系统进行资源分配和调度的一个独立单位。

    Thread的状态类型

    1、新建状态(New):新创建了一个线程对象。

    2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。

    3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。

    4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种: 
      a、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。 
      b、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。 
      c、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

    5、死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

    Thread的几个重要方法

    1、start(),调用该方法开始执行该线程

    2、run(),调用该方法直接执行线程的run()方法,调用start()方法时也会执行该方法,不过这样是由线程调度执行run()方法。

    3、stop(),调用该方法强制结束线程的执行。

    4、join(),调用该方法等待线程执行结束。

    5、sleep(),调用该方法线程进入等待。

    顺带提一句以前被我搞混淆的wait()和notify(),这两个方法都是object的方法,而不是thread的方法。

    wait()和sleep()的区别:最大的不同在于wait()会释放对象锁,而sleep()不会

  • 相关阅读:
    【bzoj4318】OSU!
    【bzoj2134】单选错位
    【UVa11584】划分成回文串
    Load a map with proxy
    2012南大GIS专业课试题
    引用webmap时如何填写username 和 password
    使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示
    填空题
    专业课知识
    Add a web map dynamically
  • 原文地址:https://www.cnblogs.com/huangzhang/p/9213546.html
Copyright © 2011-2022 走看看