• 【Java并发编程】14、Thread,线程说明


    线程的状态:New、Runnable、Blocked、Waiting、Timed waiting、Terminated

    1. RUNNABLE,对应"就绪"和"运行"两种状态,也就是说处于就绪和运行状态的线程在java.lang.Thread中都表现为"RUNNABLE"
    2. BLOCKED,对应"阻塞"状态,此线程需要获得某个锁才能继续执行,而这个锁目前被其他线程持有,所以进入了被动的等待状态,直到抢到了那个锁,才会再次进入"就绪"状态
    3. WAITING,对应"阻塞"状态,代表此线程正处于无限期的主动等待中,直到有人唤醒它,它才会再次进入就绪状态
    4. TIMED_WAITING,对应"阻塞"状态,代表此线程正处于有限期的主动等待中,要么有人唤醒它,要么等待够了一定时间之后,才会再次进入就绪状态

    Thread的各个方法对于线程状态的改变

    new Thread(),变为New状态
    start() ,变为Runnable状态,创建新的线程在栈空间中开辟新的空间.if (threadStatus != 0) 抛出异常
    run() ,不创建新的线程,直接在当前线程执行 thread的run方法
    field() ,使线程变成ready状态,从新和其他ready状态的线程参与cpu的竞争
    isAlive(),如果线程已经启动且尚未终止,则为活动状态。介于Runnable和Terminated中间,都属于活动状态
    join() ,B线程执行A.join(). B获取A的锁; 循环判断a.isAlive(),是则调用a.wait(0),进入Waiting状态
    sleep() ,当前线程进入TIMED_WAITING状态,不释放监视器锁
    interrupt(),不会中断一个正在运行的线程。如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,
    它将接收到一个中断信号,提早地终结被阻塞状态,变成Runnable状态,抛出异常InterruptedException,继续往下执行
    如果线程没有被阻塞,这时调用interrupt()将不起作用
    isInterrupted(),isInterrupted(false),查看线程的中断位,不清除
    interrupted() ,isInterrupted(true),静态方法,清除中断位,返回清除的中断位,只有当前线程才可以清除自己的中断位

    Object的方法对于线程状态的改变

    wait() ,使持有该对象的线程把该对象的控制权交出去,然后处于等待这个对象的控制权的状态。当前线程进入Waiting或者Timed waiting
    notify() ,通知某个正在等待这个对象的控制权的线程可以继续运行。
    notifyall(),通知所有等待这个对象控制权的线程继续运行。

  • 相关阅读:
    2016第17周四
    2016第17周三
    2016第17周二
    OSGI框架学习
    2016年第16周日
    2016第16周六
    如何培养技术洞见力
    2016第15周四
    深入浅出ClassLoader
    Linux智能小开关rfkill
  • 原文地址:https://www.cnblogs.com/wangzhongqiu/p/8398207.html
Copyright © 2020-2023  润新知