zoukankan      html  css  js  c++  java
  • JAVA 线程状态以及synchronized,wait,sleep,yield,notify,notifyAll

    java线程存在以下几种状态:


    1: 创建状态(New):线程被new出来,还未调用start

    2: 就绪状态(Runnable):又称为可执行状态,调用线程的start方法后,线程处于就绪状态,,线程调度程序还未给该线程分配cpu时间片执行。

    3: 运行状态(Running):线程调度程序分配cpu时间片来执行线程代码。

    4: 阻塞状态(Blocked):线程在运行过程中由于某种原因暂停运行进入阻塞状态,只有满足条件后进入就绪状态,获取cpu后才能再次进入运行状态。

    阻塞的情况分三种:

    A:等待阻塞(wait):调用wait()方法,与synchroined一起使用,线程进入对象等待池,释放synchroined的锁,处于阻塞状态。当有其他线程notify,notifyAll后线

                                  进入锁标识等待池,即进入同步阻塞状态。

    B:同步阻塞:线程运行过程中需要获取锁,但该锁被其他线程持有,则该线程进入锁标识等待池,处于同步阻塞状态。当线程获取锁之后,线程进入就绪状态。

    C:其他阻塞:当线程sleep,或者join,或者发出I/O请求后,知道yield时间到,sleep时间到,join的线程执行完,或者I/O返回后,线程进入就绪状态。

    5: 死亡状态(Dead):当线程Run方法退出或者运行出现异常线程停止时,线程就会消亡。


    synchronized有两种用法,

    一种是写在方法前,如果该方法是静态方法,则获取的锁是类锁,多线程调用该类中所有的实例的该方法都是互斥的。如果该方法不是静态的,则获取的锁是对象锁,多线程调用同一个实例的该方法是互斥的,调用不同实例则不是互斥的。

    一种是同步代码块:synchronized(){//....},同样根据方法是否是静态方法区分获取对象锁还是类锁。


    wait:与synchronized一起使用,即必须想获取指定的锁lock,才能lock.wait。wait时,会释放lock,线程进入对象等待池,释放synchroined的锁,处于阻塞状态。当有其他线程notify,notifyAll后线 进入锁标识等待池,即进入同步阻塞状态。


    notify:与synchronized一起使用,即必须想获取指定的锁lock,才能lock.notify,synchronized代码块结束后释放锁,通知一个因lock而进入等待阻塞的线程进入同步阻塞状态。

    notifyAll:与synchronized一起使用,即必须想获取指定的锁lock,才能lock.notifyAll,synchronized代码块结束后释放锁,会通知所有因Lock而进入等待阻塞的线程进入同步阻塞状态。

    sleep:线程暂停运行,进入阻塞状态,但不会释放之前持有的锁,sleep能够让低优先级的线程有机会运行。

    yield:线程进入就绪状态,不会释放锁,让同优先级的其他线程有机会运行。但下次可能继续分配cpu时间片,进入运行状态。

    join:让一个线程B加入到一个线程A的尾部,在A运行完前,B不能运行。



  • 相关阅读:
    手把手教你爬取PC端『某酷视频』个人历史播放数据,并可视化展示
    python3连接mysql--增删改查
    以『公众号』为例,手把手教你爬取PC端数据
    Flask结合ECharts实现在线可视化效果,超级详细!
    What is Long-Read Sequencing?
    Single molecule real-time (SMRT) sequencing comes of age: applications and utilities for medical diagnostics 单分子实时(SMRT)测序成熟:医学诊断的应用和实用程序
    2020年第10届生物科学,生物化学与生物信息学国际会议(ICBBB 2020)
    ICBCB 2021 第九届生物信息学与计算生物学国际会议-2021年5月25-27日-中国太原
    太原 ICBCB 2020年第八届生物信息学与计算生物学国际会议
    2016年大数据与精准生物医学信息学研讨会 上海
  • 原文地址:https://www.cnblogs.com/marcotan/p/4256951.html
Copyright © 2011-2022 走看看