Java中的synchronized关键字是用来实现线程同步的机制。它可以应用于方法或代码块,并且保证同一时刻只有一个线程能够进入被synchronized修饰的方法或代码块,从而保证了线程安全。
底层原理如下:
在Java中,每个对象都有一个监视器锁(也称为内置锁或互斥锁)。当线程进入synchronized修饰的方法或代码块时,它会尝试获取对象的监视器锁。
当一个线程获取到锁时,其他线程就无法获取到该锁,只能等待。当线程执行完synchronized修饰的方法或代码块后,会释放锁,其他线程可以继续尝试获取锁。
需要注意的是,synchronized关键字的锁的粒度是对象级别的。也就是说,当一个对象的某个方法被synchronized修饰时,其他线程无法同时调用该对象的其他synchronized修饰的方法。但是,如果多个线程调用不同对象的方法,它们之间不会相互阻塞。