java 线程的生命周期和锁

线程的生命周期:

Thread.state枚举类共有6种状态:

  • NEW:尚未启动的线程状态;
  • RUNNABLE:jvm中执行的状态;
  • BLOCKED:被阻塞等待监视器锁定的状态;
  • WAITING:等待其他线程执行的状态;
  • TIME_WAITING:达到执行等待时间的线程状态;
  • TERMINATED:已退出线程的状态;

线程生命周期图:

  • runnable:可以细分为 ready 和running状态,这个是逻辑上,但是不可查看,Thread,yeild()方法的作用在这里;

线程同步机制【保证数据的安全性】:任何同一时刻,最多只能有一个线程访问;

  • 同步代码块

    synchronized(对象) {
        //需要同步的代码块;
    }
    
  • 同步方法

    public sychronized void func(){
        //需要同步代码;
    }
    

互斥锁:

  • 每一个对象都对应于宇哥可称之为"互斥锁"的标记,用这个标记来保证任意时刻异能有一个线程访问该对象;
  • 关键字:synchronized用来与对象的互斥锁联系,当某个对象用synchronized 来修饰,表明该对下给你在任意时刻只能有一个线程访问;
  • 同步方法:
    • 非静态的,默认是 this,也可以是其他对象【要求是对所有线程,是相同的一个对象】;
    • 静态同步方法:默认为当前类本身【类名.class】;
  • 线程死锁:几把锁,分别被线程占用,逻辑错误;
  • 释放锁:
    • 下面操作会释放锁
      • 当前线程的同步方法、同步代码块执行结束;
      • 在同步块、方法中,遇到 break,return;
      • 在同步块、方法中,出现未处理的Error 或 Exception导致异常结束;
      • 在同步块、方法中,执行了线程对象的wait() 方法,当前线程暂停,并释放锁;
    • 下面操作不会释放锁:
      • 在同步块、方法中,调用Thread.sleep()、 Thread.yield()方法暂停当前程序的执行;
      • 在同步块、方法中,其他线程调用了该线程的suspend()方法,将该线程挂起;
posted @   烟雨断桥  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示