当前位置: 首页 > article >正文

八股文实战之JUC:静态方法的锁和普通方法的锁

1、对于staic同步方法锁住的是class类模板(Class对象)  对象是线程(调用者)  调用者只有获取资源的锁才能调用
2、普通同步方法 锁住的资源是class对象   对象是线程(调用者)

即:

  • 静态同步方法

    • 锁住的是类的 Class 对象。
    • 这意味着同一个类的所有静态同步方法之间是互斥的,不论是哪个实例调用这些方法。
  • 普通同步方法

    • 锁住的是调用该方法的实例对象。
    • 不同的实例可以并行执行它们的普通同步方法,因为它们各自锁住的是自己的对象。

1、锁住的东西不同可以视作不同的锁 

2、进程只有获取锁 才能访问锁对应的方法等资源

3、如果锁不同 就不存在锁竞争

package com.example.mp.juc.lock8;

import java.util.concurrent.TimeUnit;

/**
 * @author Mr.Lan
 * @version 1.0
 * @ClassName Test1$
 * @description
 * @date 2025/2/22 20:46
 **/
public class Test1 {

    /*1、对于staic同步方法锁住的是class类模板(Class对象)  对象是线程(调用者)  调用者只有获取资源的锁才能调用
    * 2、普通同步方法 锁住的资源是class对象   对象是线程(调用者)  * */
    public static void main(String[] args) throws InterruptedException {
        Phone4 phone4 = new Phone4();
        Phone4 phone5 = new Phone4();
        new Thread(()->{phone4.sendSms();}).start();
        TimeUnit.SECONDS.sleep(1);
        new Thread(()->{phone4.call();}).start();
    }
}
class Phone4{

    Phone4(){
    }
    public static synchronized void sendSms(){
        try {
            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("发短信");
    }

    public  synchronized void call(){
        System.out.println("打电话");
    }




}


http://www.kler.cn/a/557763.html

相关文章:

  • go json处理 encoding/json 查询和修改gjson/sjson
  • java开发工程师面试技巧
  • 对计算机中缓存的理解和使用Redis作为缓存
  • LeetCode 2506.统计相似字符串对的数目:哈希表+位运算
  • Trae+Qt+MSVC环境配置
  • 运筹说 第132期 | 矩阵对策的基本理论
  • PostgreSQL:更新字段慢
  • 索引与Redis 知识点
  • 易飞ERP查询报表提示:报表档的字段数为21但要写到报表档的字段数为42;报表没有信息;;
  • 策略模式介绍和代码示例
  • 对Revit事务机制的一些推测
  • Webpack的基本功能有哪些
  • 负载均衡集群( LVS 相关原理与集群构建 )
  • RT-Thread+STM32L475VET6——icm20608传感器
  • 可变参数学习
  • 论文略:ACloser Look into Mixture-of-Experts in Large Language Models
  • 详解单例模式、模板方法及项目和源码应用
  • 基于Spring Boot的兴顺物流管理系统设计与实现(LW+源码+讲解)
  • Linux提权篇之内核提权(三)
  • Rust并发编程实践:10分钟入门系统级编程