• 线程的状态


    线程的状态

     

     

    线程被创建时,属于新建状态,调用start后进入就绪状态

    就绪状态被cpu调用时,进入运行状态

    运行状态在调用sleep、wait、join后会进入阻塞状态

    运行状态执行完成后会进入死亡状态,这里包括正常执行完毕和异常执行完毕

    运行状态在os切换时,线程会进入就绪状态

    线程wait进入阻塞状态,被调用notify之后,会进入就绪状态

    线程sleep进入阻塞状态,时间过后会进入就绪状态

    当前线程的子线程join之后,当前线程进入阻塞状态,在子线程死亡之后,当前线程进入就绪状态

    阻塞状态的线程,被中断之后会进入死亡状态

    线程相关的一些方法解析

    sleep

    详细描述:

    Thread类的静态方法

    public static native void sleep(long millis) throws InterruptedException; 

    使当前线程睡眠n毫秒,线程从运行状态进入阻塞状态,n毫秒之后重新进入就绪状态,继而进入运行状态

    进入阻塞状态后可以被中断

    被调用t.interrupt()之后,该线程会被中断,sleep方法处抛出InterruptedException,捕获之后可以做相应处理

    join

    Thread类的非静态方法

    public final void join() throws InterruptedException

    使用举例:

    Thread t = new Thread();

    t.start();

    t.join();

    这里定义主线程main,子线程t

    main调用t.join之后会进入阻塞状态,等待t线程的完结,t完结之后,main线程进入就绪状态

    main线程在调用t.join之后,也可以被interrupt()中断。

    yield

    Thread类的非静态方法

    public static native void yield();

    当前线程主动让出cpu,从运行状态进入就绪状态,这个动作并不是立即执行的

    interrupt

    Thread类的非静态方法

    public void interrupt()

    线程对象调用interrupt之后,会从阻塞状态退出来,并抛出InterruptedException异常

    wait

    Object类的方法

    public final void wait() throws InterruptedException

    使用举例

    Object obj;

    obj.wait();

    此方法必须在同步块中调用,wait之后线程进入阻塞状态,当是不会释放对象的锁

    被调用interrupt()之后,该线程会被中断,抛出InterruptedException

    notify

    Object类的方法

    public final native void notify()

    Object obj;

    obj.notify();

    此方法会唤醒在对象obj上wait的线程,只会唤醒一个

    notifyAll

    Object类的方法

    public final native void notifyAll();

    Object obj;

    obj.notifyAll();

    此方法会唤醒在对象obj上wait的所有线程

  • 相关阅读:
    【Java每日一题】20161027
    【Java每日一题】20161026
    【Java每日一题】20161025
    【Java每日一题】20161024
    【Java每日一题】20161021
    【Java每日一题】20161020
    【Java每日一题】20161019
    Xen们和Open Stack们
    Linux内存管理子系统
    Python学习资料收集
  • 原文地址:https://www.cnblogs.com/tangyanbo/p/6725369.html
Copyright © 2020-2023  润新知