synchronized原理
时间: 2023-10-28 14:53:17 浏览: 29
synchronized详解
`Synchronized` 是 Java 中用来实现同步的关键字,可以修饰代码块或方法。它的原理是通过获取对象的锁来实现多线程间的同步。当一个线程进入一个被 synchronized 修饰的代码块或方法时,会尝试获取对象的锁,如果锁已经被其他线程获取,则该线程会进入阻塞状态等待锁的释放。当获取锁的线程执行完同步代码块或方法后,会释放锁,让其他等待该锁的线程可以继续执行。
在 Java 中,每个对象都有一个与之关联的“监视器”,也就是对象锁,通过`synchronized`关键字可以实现对对象锁的获取和释放。
当一个线程执行到 synchronized 代码块时,它会尝试获取代码块所在对象的锁,如果获取不到锁,线程就会阻塞等待。如果获取到锁,线程就可以执行代码块中的代码,执行完后就会释放锁,让其他线程可以获取锁并执行同步代码块。这样就可以保证同步代码块中的代码只有一个线程在执行,从而避免了多个线程同时访问共享资源导致数据不一致的问题。
需要注意的是,`synchronized`关键字可以修饰静态方法、实例方法和代码块,但是锁的范围不同。修饰静态方法时,锁的范围是整个类的 Class 对象,修饰实例方法时,锁的范围是当前对象实例,修饰代码块时,锁的范围是对象锁或类锁,具体取决于 synchronized 后面的对象是实例对象还是类对象。
阅读全文