zoukankan      html  css  js  c++  java
  • Java线程分析


    一、Java线程的生命周期中,存在几种状态。在Thread类里有一个枚举类型State,定义了线程的几种状态
    public enum State {
      NEW,
      RUNNABLE,
      BLOCKED,
      WAITING,
      TIMED_WAITING,
      TERMINATED;
    }
    
    

     二、各状态含义

    1. NEW: 线程创建之后,但是还没有启动。这时候它的状态就是NEW
    2. RUNNABLE: Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)
    3. BLOCKED: 阻塞状态,等待锁的释放,比如线程A进入了一个synchronized方法,线程B也想进入这个方法,但是这个方法的锁已经被线程A获取了,这个时候线程B就处于BLOCKED状态
    4. WAITING: 等待状态,处于等待状态的线程是由于执行了3个方法中的任意方法。
      1. Object的wait方法,并且没有使用timeout参数;
      2. Thread的join方法,没有使用timeout参数
      3. LockSupport的park方法。 处于waiting状态的线程会等待另外一个线程处理特殊的行为。
      再举个例子,如果一个线程调用了一个对象的wait方法,那么这个线程就会处于waiting状态直到另外一个线程调用这个对象的notify或者notifyAll方法后才会解除这个状态
    5. TIMED_WAITING: 有等待时间的等待状态,比如调用了以下几个方法中的任意方法,并且指定了等待时间,线程就会处于这个状态。
      1. Thread.sleep方法
      2. Object的wait方法,带有时间
      3. Thread.join方法,带有时间
      4. LockSupport的parkNanos方法,带有时间
      5. LockSupport的parkUntil方法,带有时间
    6. TERMINATED: 线程中止的状态,这个线程已经完整地执行了它的任务

     三、线程的状态图

  • 相关阅读:
    Android实战技巧之四十九:Usb通信之USB Host
    Netty in Action (七) 第三章节 Netty组件和设计
    打造敏捷的自组织团队
    Cocos2d-x移植到Android平台编译的两个文件Android.mk和Application.mk
    Codeforces Round #306 (Div. 2) (ABCE题解)
    事情非常重要却总不想開始怎么办
    <html>
    Android中Activity与Task相关的属性解析
    大话设计模式—策略模式
    android hander怎样避免内存泄露
  • 原文地址:https://www.cnblogs.com/tqlin/p/10452123.html
Copyright © 2011-2022 走看看