Java里面加锁的方式
synchronized
使用synchronized关键字可以实现对代码块或方法的加锁。当一个线程获取到锁后,其他线程将被阻塞,直到该线程释放锁。
示例代码如下:
public synchronized void synchronizedMethod(){// 代码块或方法体}
ReentrantLock类
ReentrantLock是Java提供的显式锁(Explict Lock)实现类。它使用lock()和unlock()方法来加锁和释放锁,可以实现更灵活的加锁操作。
示例代码如下:
private ReentrantLock lock = new ReentrantLock();public void lockMethod(){lock.lock();try{// 代码块或方法体} finally{lock.unlock();}}
ReadWriteLock接口
ReadWriteLock是Java提供的读写锁机制,它允许多个线程同时读取共享资源,但只允许一个线程进行写操作。
示例代码如下:
private ReadWriteLock lock = new ReentrantReadWriteLock();public void readMethod(){lock.readLock().lock();try{// 读操作} finally {lock.readLock().unlock();}}public void writeMethod(){lock.writeLock().lock();try{// 写操作} finally{lock.writeLock().unlock();}}
AtomicInteger类
对于某些特定情况下的原子操作,可以使用AtomicInteger类来实现线程安全。它使用CAS(Compare and Swap)操作来确保原子性。
示例代码如下:
private AtomicInteger counter = new AtomicInteger();public void increment(){counter.incrementAndGet();}
总结
以上是一些常见的加锁方式,选择哪种方式取决于具体的需求和场景。需要注意的是,在使用锁机制时,要避免死锁和竞态条件等并发问题,并合理设计锁的粒度,以充分利用多线程的优势。
来源地址:https://blog.csdn.net/qq_46130027/article/details/131450069