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: 线程中止的状态,这个线程已经完整地执行了它的任务

     三、线程的状态图

  • 相关阅读:
    CodeForces 706C Hard problem
    CodeForces 706A Beru-taxi
    CodeForces 706B Interesting drink
    CodeForces 706E Working routine
    CodeForces 706D Vasiliy's Multiset
    CodeForces 703B Mishka and trip
    CodeForces 703C Chris and Road
    POJ 1835 宇航员
    HDU 4907 Task schedule
    HDU 4911 Inversion
  • 原文地址:https://www.cnblogs.com/tqlin/p/10452123.html
Copyright © 2011-2022 走看看