美文网首页
java线程之Thread类

java线程之Thread类

作者: dimdark | 来源:发表于2018-03-10 16:01 被阅读0次

    1. java线程的生命周期

    java中的线程的生命周期有6个阶段:
    - NEW(新建)
    - RUNNABLE(就绪/运行)
    - BLOCKED(阻塞)
    - WAITING(等待)
    - TIMED_WAITING(时间等待)
    - TERMINATED(消亡)
    线程的生命周期用一个枚举类来表示:

    线程的生命周期
    线程的生命周期图解

    2. 线程的上下文切换

    CPU在执行一个线程的过程中,转而去执行另外一个线程,这个叫做线程上下文切换; 在进行线程上下文切换时要保存好当前线程的运行状态, 如: 程序计数器里的值, CPU寄存器里的值等, 以使线程下一次执行能够从中断点恢复执行;

    3. java线程的优先级

    在java中, 线程的优先级分为 1 - 10 这10个等级;
    JDK中使用3个常量来预定义线程优先级的值:

    线程优先级

    注意: 线程的优先级具有继承性, 比如, 线程A启动线程B, 则B线程的优先级默认与线程A是一样的

    4. java线程的分类

    java的线程可以分为两种类型的线程: 一种是用户线程, 另一种是守护线程;
    守护线程是一种特许的线程, 当jvm进程中不存在非守护线程时则所有守护线程会自动销毁;
    相关方法:

    守护线程

    5. Thread类 的常用方法

    • currentThread 方法 (静态方法)
      返回正在执行当前代码段的线程对象
    currentThread()方法
    • sleep(long)方法 (静态方法)
      在指定的毫秒数内让当前正在执行的线程Thread.currentThread()休眠(进入 TIMED_WAITING 状态)

      sleep方法

    注意:
    调用sleep方法而进入 TIMED_WAITING 状态的线程并不会释放它本身已获得的对象锁;
    Thread.sleep(long) 方法执行前或执行时当前线程的表示中断状态的标志被interrupt()方法置为true则会抛出InterruptedException异常;

    • yield() 方法 (静态方法)
      告知jvm当前线程想要放弃当前的CPU资源, 将它让给其他的任务去占用CPU执行时间, 注意: jvm未必会听从它的建议, 即有可能当前线程刚刚放弃又马上获得CPU时间片

    • interrupted() 方法 (静态方法)
      判断当前线程是否已经被中断

    interrupted方法

    注意: interrupted() 方法会将当前线程的中断状态清除
    例子:

    interrupted方法例子
    • isInterrupted() 方法 (实例方法)
      判断调用该方法的线程对象是否已经是中断状态
    isInterrupted方法
    • interrupt() 方法 (实例方法)
      调用 interrupt() 方法并不是真的停止线程, 而是在当前线程中打上了一个停止的标记
    interrupt方法
    • isAlive 方法 (实例方法)
      判断当前的线程是否处于活动状态(活动状态是指线程已经启动且尚未终止, 包括除TERMINATED外的其他状态)
    isAlive()方法

    相关文章

      网友评论

          本文标题:java线程之Thread类

          本文链接:https://www.haomeiwen.com/subject/aqcmfftx.html