• Java并发包1--线程的状态及常用方法


    一、线程主要有以下几种状态:

    new(新建):线程刚刚被创建

    runnable(就绪):新建的线程执行start方法进入就绪状态等待系统调度分配CPU,被分配了之后就进入运行中状态

    blocked(阻塞):当线程执行被锁的代码块或方法时,等待其他线程释放锁而处于阻塞状态

    waiting(等待):线程进入等待状态,需要等待其他线程做出一些特点动作(通知或中断)

    time_waiting(超时等待):和waiting状态类似,不过可以在指定的时间自行结束等待

    terminated(终止状态):当线程执行run方法完成或因为异常退出时进入终止状态

    二、线程的各种状态的流转图如下示:

     

     三、线程的各种方法用法

    start():线程被创建之后,执行start方法使线程进入就绪状态,等待系统调度分配CPU来执行

    run():线程执行业务逻辑,执行完成run方法里面的内容就会进入终止状态

    yield():yield方法是让步的意思,将当前线程状态由“运行中”进入到“就绪状态”,目的是让出CPU来给其他线程来执行,但是不会释放当前线程持有的对象锁(让步之后就绪的线程等待CPU执行,有可能还会执行让步的线程)

    wait():使当前线程进入等待状态,并且释放当前线程持有的对象锁,直到等待的时间到了或者是其他线程执行该对象的唤醒方法,如何才可继续进入就绪状态等待CPU

    notify():唤醒该对象监视器上等待单个线程

    notifyAll():唤醒该对象监视器上等待的所有线程

    sleep():使当前线程进入睡眠等待状态,不会释放对象锁,睡眠时间结束重新进入就绪状态

    join():join方法会使当前线程当期执行,直到join的线程执行完成才会继续执行。比如main方法里面有两个线程

    t1.start();

    t1.join();

    t2.start();

    则t1线程执行之后,再执行t1.join(),那么此时main线程就会放弃后面的执行,直到t1线程执行结束之后才会继续执行main线程,然后继续执行t2线程。

  • 相关阅读:
    dp_Pku1887
    他们实际上控制的定义很easy5/12
    一:redis 的string类型
    我已经写了DAL层的代码生成器
    《Java并发编程实战》第十二章 测试并发程序 读书笔记
    [Pug] Template Engine -- Jade/ Pug
    [Angular] Alternative Themes
    [Angular] Separating Structural Styles From Theme Styles
    [React] Setup 'beforeunload' listener
    [Node] Convert CommonJS Requires to ES6 Imports
  • 原文地址:https://www.cnblogs.com/jackion5/p/10765565.html
Copyright © 2020-2023  润新知