Java并发编程——原子性锁

本文探讨了Java并发编程中的同步锁,包括synchronized的四种用法及其实现原理。详细阐述了JMM的规定,确保线程间的可见性,并分析了导致共享变量不可见的原因和解决策略。此外,还提到了使用关键字和内存屏障来保证数据一致性的重要性。
摘要由CSDN通过智能技术生成

一、同步锁

  • synchronized同步锁:依赖JVM来实现;
    优缺点:不可中断,适合竞争不激烈的场景,可读性号;
  • Lock:依赖特殊的CPU指令、代码来实现,如ReentrantLock
    优缺点:可中断锁,多样化同步,适合竞争激烈的场景,能维持常态;

二、synchronized 常见四种用法:

  • 修饰代码块:大括号括起的代码,作用于调用的对象;
  • 修饰方法【同步方法】:整个方法,作用于调用的对象;
  • 修饰静态方法:整个静态方法,作用于所有对象;
  • 修饰类:括号括起来的部分,作用于所有对象;

父类有同步方法时,当子类继承父类该方法时,子类方法不带synchronized同步特性。因为synchronized不是声明式的关键字,如果子类想要同步该方法时,需要显示设置synchronized

JMM关于synchronized的两条规定:

  • 线程解锁前,必须把共享变量的最新值刷新到主内存中;
  • 线程加锁前,将清空工作内存中共享变量的值,从而保证在使用共享变量时,从主内存中重新读取到最新的值;
@Slf4j
public class SynchronizedExample2 {
   


    /**
     * 修饰一个类
     */
    public static void test1(int j){
   
        synchronized (SynchronizedExample1.c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值