全面详解Synchronized关键字

本文详细介绍了Synchronized关键字的作用、应用场景、原理、使用方法及其特点,并探讨了其他并发控制方式,如Lock、ReentrantLock和CAS操作。Synchronized提供线程安全,但可能影响效率,而CAS作为乐观锁,资源消耗少,适用于特定场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

示意图

一、Synchronized的作用
  • 保证同一时刻最多只有1个线程执行 被Synchronized修饰的方法 / 代码,
    其他线程 必须等待当前线程执行完该方法 / 代码块后才能执行该方法 / 代码块。
二、 应用场景

保证线程安全,解决多线程中的并发同步问题(实现的是阻塞型并发),具体场景如下:

  • 修饰 实例方法 / 代码块时,(同步)保护的是同一个对象方法的调用 & 当前实例对象
  • 修饰 静态方法 / 代码块时,(同步)保护的是 静态方法的调用 & class 类对象
三、 原理
  • 依赖 JVM 实现同步
  • 底层通过一个监视器对象(monitor)完成, wait()、notify() 等方法也依赖于 monitor 对象

监视器锁(monitor)的本质 依赖于 底层操作系统的互斥锁(Mutex Lock)实现

四、 具体使用

Synchronized 用于 修饰 代码块、类的实例方法 & 静态方法

1、使用规则

示意图

2、锁的类型 & 等级
  • 由于Synchronized 会修饰 代码块、类的实例方法 & 静态方法,故分为不同锁的类型
    具体如下:
    在这里插入图片描述

  • 之间的区别
    示意图

3、使用方式
/**
 * 对象锁
 */
    public class Test{
    
    // 对象锁:形式1(方法锁) 
    public synchronized void Method1(){
    
        System.out.println("我是对象锁也是方法锁"); 
        try{
    
            Thread.sleep(500); 
        } catch (InterruptedException e){
    
            e.printStackTrace(); 
        } 
 
    } 
 
    // 对象锁:形式2(代码块形式) 
    public void Method2(){
    
        synchronized 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值