synchronized原理
时间: 2023-06-14 11:08:25 浏览: 82
synchronized详解
synchronized 是 Java 中用来实现线程同步的关键字,它可以被用来修饰方法或代码块。
在 Java 中,每一个对象都有一个内部锁(或者称为监视器锁/互斥锁),当一个线程访问一个被 synchronized 修饰的方法或代码块时,它会尝试获得该对象的内部锁。如果该锁已经被其他线程持有,则当前线程会阻塞直到该锁被释放。
当某个线程持有了对象锁,其他线程将无法访问该对象的 synchronized 方法或代码块,它们会被阻塞直到该锁被释放。这种锁机制可以保证每一个时刻只有一个线程能够执行被 synchronized 修饰的代码块,从而避免了多个线程同时修改共享资源的情况,保证了数据的一致性。
需要注意的是,synchronized 可以用在静态方法、实例方法和代码块上。对于静态方法和代码块,它们会锁住类的 Class 对象,而不是实例对象的内部锁。因此,一个线程持有了某个类的 Class 对象的锁后,其他线程无法访问该类的所有静态 synchronized 方法和代码块,但可以访问实例方法和代码块。
阅读全文