并发安全的特性 -- 原子性:锁

本文详细介绍了并发安全中synchronized的原子性特性,包括修饰代码块、实例方法、类以及静态方法的用法,并探讨了JDK1.6之后synchronized的底层优化,如偏向锁、轻量级锁、自旋锁等,以及synchronized与Lock的对比分析。

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

并发安全的特性 – 原子性:锁

  JDK为我们提供了两种我们比较常见的锁,分别是:

第一种,就是我们比较熟悉的synchronized: 依赖于JVM的关键字。

第二种,是Lock: 依赖特殊的CPU指令,代码实现,ReektrantLock。

原子性:synchronized

主要有以下几种使用方法:

一、修饰代码块

  大括号括起来的代码,作用于调用的对象。指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。 和 synchronized 方法一样,synchronized(this)代码块也是锁定当前对象的。synchronized 关键字加到 static 静态方法和synchronized(class)代码块上都是是给 Class 类上锁。这里再提一下:synchronized关键字加到非 static 静态方法上是给对象实例上锁。另外需要注意的是:尽量不要使用 synchronized(String a) 因为JVM中,字符串常量池具有缓冲功能!

二、修饰实例方法

子类继承该方法时,不能继承synchronized关键字,作用在同一个对象。

private static Object obj = new Object();

    //修饰一个代码块(作用在同一个对象)
    public void test1(int j) {
   
        synchronized (this) {
   
            for (int i = 0; i < 100; i++) {
   
                log.info("test1 {} - {}", j, i);
            }
        }
    }

    //修饰一个方法(子类继承该方法时,不能继承synchronized关键字)
    //作用在同一个对象
    public synchronized void test2(int j) {
   
        for (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值