synchronized关键字
可以修饰方法或代码块,确保同一时间只有一个线程可以执行被修饰的代码。
使用`synchronized`方法:在方法声明中使用`synchronized`关键字。
使用`synchronized`代码块:在代码块中使用`synchronized`关键字,并指定锁对象。
Lock接口和ReentrantLock实现类
Java.util.concurrent包中提供了Lock接口和ReentrantLock实现类,它们提供了更灵活的锁控制。
使用`lock()`方法获取锁,使用`unlock()`方法释放锁。
其他Lock实现类
除了ReentrantLock,Java还提供了其他实现Lock接口的类,如ReentrantReadWriteLock、StampedLock等,它们提供了更多的功能和灵活性。
volatile关键字
`volatile`关键字可以确保多个线程对变量的可见性,但不能替代锁。
选择合适的加锁方式取决于具体的应用场景和需求。需要注意的是,在使用锁时,应当确保锁的获取和释放是成对出现的,以避免死锁等问题。