Java

Java中synchronized的底层原理是什么

小亿
96
2024-02-05 10:20:39
栏目: 编程语言

Java中的synchronized关键字是用来实现线程同步的机制。它可以应用于方法或代码块,并且保证同一时刻只有一个线程能够进入被synchronized修饰的方法或代码块,从而保证了线程安全。

底层原理如下:

  1. synchronized关键字基于对象锁机制实现。每个对象都有一个与之相关联的锁,当线程进入synchronized修饰的方法或代码块时,首先尝试获取对象的锁。
  2. 如果获取到锁,线程进入临界区执行代码,执行完成后释放锁,其他等待获取锁的线程可以继续执行。
  3. 如果无法获取到锁,线程进入阻塞状态,等待获取到锁的线程释放锁后,被阻塞的线程重新尝试获取锁。
  4. 当一个线程获取到锁后,其他线程都无法获取该锁,只能等待。

在Java中,每个对象都有一个监视器锁(也称为内置锁或互斥锁)。当线程进入synchronized修饰的方法或代码块时,它会尝试获取对象的监视器锁。

当一个线程获取到锁时,其他线程就无法获取到该锁,只能等待。当线程执行完synchronized修饰的方法或代码块后,会释放锁,其他线程可以继续尝试获取锁。

需要注意的是,synchronized关键字的锁的粒度是对象级别的。也就是说,当一个对象的某个方法被synchronized修饰时,其他线程无法同时调用该对象的其他synchronized修饰的方法。但是,如果多个线程调用不同对象的方法,它们之间不会相互阻塞。

0
看了该问题的人还看了