zoukankan      html  css  js  c++  java
  • 线程--概念

    1. 首先是线程的sleep和yeld

    sleep会阻塞当前线程,使所有优先级的线程都可以获取执行机会,但并不释放当前线程已经获得的锁

    yield,线程回到可执行状态,同优先级的线程才可获取执行机会,不释锁

    还有两个经常放一块对比:

    • wait,它释放已经占有的锁,等待唤醒,notify唤醒后进入锁池等待获取锁标记,获取后变为可执行状态等待cpu调度执行
    • join,当前线程0获取另一个线程1对象的对象锁(synchronized),如果线程活着就wait(),直到线程结束(自动notify)

        join(1000)并不能真实表现当前线程等待1000毫秒,解释下,调用join(1000)后,

        线程0还没有获取线程1对象锁(synchronized等待中),如果有其它线程3获得线程1对象锁,线程0就阻塞在synchronized,要等待线程3释放线程1的synchronized后线程0才能进入线程1的synchronized

    2. 线程状态

    public enum State {
        //线程刚创建
        NEW,
     
        //start,在JVM中正在运行的线程
        RUNNABLE,
     
        //线程处于阻塞状态,等待监视锁,可以重新进行同步代码块中执行
        BLOCKED,
     
        //调用join() wait()方法
    WAITING,

    //调用sleep(时间) join(时间) wait(时间)方法
    TIMED_WAITING,

    //线程执行完毕,已经退出
    TERMINATED;
    }

    PS:blocked和waiting状态的区别主要是blocked只发生在要进入synchronized临界区时(排除reentrantlock.lock),waiting状态是进入临界区,拿到锁后调用wait等方法进入的状态

     参考文章:

    1. java 线程的几种状态

    2. Java线程的状态及切换

    3. Java编程体验:线程的7种状态及相互转换(图)

    4. [Java并发编程]-线程的六种状态及其状态转换

  • 相关阅读:
    237. 删除链表中的节点
    牛客网-第一场-J-Fraction Comparision
    1. 两数之和
    CCF-201903-1大中小
    学习Python
    Convert Sorted Array to Binary Search Tree
    3-1
    Merge Sorted Array
    Climbing Stairs
    Add Binary
  • 原文地址:https://www.cnblogs.com/yhzh/p/5888878.html
Copyright © 2011-2022 走看看