首页 > 其他分享 >synchronized

synchronized

时间:2024-08-09 17:40:57浏览次数:14  
标签:synchronized 代码 实例 线程 MyClass public

synchronized关键字来保证线程安全的,被sychronized锁住的代码部分,同一时刻只能有一个线程可以访问,其他线程会block(同一个对象内,不同对象间不会影响)。由于synchronized的机制是在同一时刻只能有一个线程操作,其他的线程阻塞或者轮询等待,在线程竞争激烈的情况下,这种方式的效率会非常的低下。

锁的范围

synchronized锁住的范围越小越好,类 > 方法 > 代码块。

锁的对象

可以锁类、实例。

1、类锁

  • 锁定整个类(即Class对象)。
  • 同一时间只有一个线程可以执行同步的代码块,不管有多少个实例。
public class MyClass {
    public void someMethod() {
        synchronized (MyClass.class) {
            // 同步代码
        }
    }
}

2、实例锁

  • 锁定当前对象(即实例对象)。
  • 同一时间只有一个线程可以执行同步代码块。不同实例间没有影响。
// 代码块
public class MyClass {
    public void someMethod() {
        synchronized (this) {   // 注意,不能锁MyClass
            // 同步代码
        }
    }
}
// 方法
public class MyClass {
    public synchronized void synchronizedInstanceMethod() {
        // 同步代码
    }
}

3、字段锁

  • 锁定指定的对象实例。适用于更细粒度的控制锁。
  • 同一时间只有一个线程可以执行同步的代码块。不同实例间没有影响。
public class MyClass {
    private final Object lock = new Object();

    public void someMethod() {
        synchronized (lock) {
            // 同步代码
        }
    }
}

 

标签:synchronized,代码,实例,线程,MyClass,public
From: https://www.cnblogs.com/zhegemaw/p/18351128

相关文章

  • Java并发—synchronized关键字的应用
    目录1、synchronized适用场景2、synchronized的原理3、synchronized的锁升级4、synchronized的注意事项5、总结synchronized是Java中用于实现线程同步的关键字。它可以在方法级别或代码块级别使用,以确保同一时刻只有一个线程可以访问被同步的代码段。synchronized通......
  • synchronized介绍
    synchronized原理:从JVM规范中可以看到Synchonized在JVM里的实现原理,JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但两者的实现细节不一样。代码块同步是使用monitorenter和monitorexit指令实现的,而方法同步是使用另外一种方式实现的,通过编译之后,同步方法与普......
  • 一文讲清楚synchronized原理---每周一更系列
    synchronized是Java提供的原子性内置锁,这种内置的并且使用者看不到的锁也被称为监视器锁。synchronized通过在代码块前后加上monitorenter和monitorexit字节码指令用于实现进入和退出。如果是同步方法,则是打上标记,隐式的使用monitorenter和monitorexit字节码指令。在jdk1.5之前......
  • 解锁Synchronized的奥秘:从原理到场景,再到锁升级全攻略!
    本期说一下Synchronized的相关面试题。Synchronized的作用或者说一般用在什么场景?原子性:确保线程互斥的访问同步代码可见性:保证共享变量的修改能够及时可见。有序性:有效解决指令重排问题。说一下Synchronized的原理?答:每个java对象都有一个与之相关联的监视器(monit......
  • synchronized
    要想理解synchronized原理,必须要了解cas和用户态、内核态的理论synchronized是关键字,具体怎么实现要翻cpp、汇编代码,记住理论就行了CAS全称叫CompareAndSwap或者CompareAndSet,比较并交换、比较并设置。具体是:在执行操作之前,先比较当前内存中的值是否等于期望值,如......
  • 当@Transactional遇上@synchronized生产问题
    近日遇到一个问题,就是一个订单被两个用户抢了问题,排查后发现是由于@Transactional和@synchronized注解的使用问题一、问题点:数据重复读@Transactional注解用于开启事务,当在高并发情况下我们可能为了保证数据的安全使用悲观锁,可以在方法上使用@synchronized使用悲观锁。一......
  • synchronized关键字
    在Java中,关键字synchronized可以保证在同一个时刻,只有一个线程可以执行某个方法或者某个代码块(主要是对方法或者代码块中存在共享数据的操作),同时我们还应该注意到synchronized的另外一个重要的作用,synchronized可保证一个线程的变化(主要是共享数据的变化)被其他线程......
  • Synchronized
    Synchronized的表现形式普通同步方法普通同步方法使用 synchronized 关键字修饰,锁对象是当前实例对象(即方法所属对象的实例)。publicsynchronizedvoidmethod(){//锁对象是当前实例对象}静态同步方法静态同步方法使用 synchronized 关键字修饰,锁对象是当前......
  • [ABC339D]Synchronized Players
    题目大意给定一个N*N的地图,地图中#表示不能走,地图上有两个人,两个人每次走的方向都相同,每次只能向相同的方向走,,问最少几步就能相遇?题解这个题一看就是搜索,广搜,刚开始我陷入一个误区,让两个人分开记录状态,这个时候有个问题,当一个人能走,另一个人不能走的时候,步数就不同步,这个问题就......
  • 【转】-synchronized与Lock的区别与使用
    详解synchronized与Lock的区别与使用该博客转载自​淳安郭富城​的​详解synchronized与Lock的区别与使用1.引言:昨天在学习别人分享的面试经验时,看到Lock的使用。想起自己在上次面试也遇到了synchronized与Lock的区别与使用。于是,我整理了两者的区别和使用情况,同时,对synchroni......