java中的同步锁(synchronized关键字、ReentrantLock类、ReadWriteLock类)

1.synchronized关键字:synchronized关键字是Java内置的同步机制之一,它可以用来修饰方法或代码块。当使用synchronized修饰方法时,该方法成为同步方法,只允许一个线程进入方法执行。而当使用synchronized修饰代码块时,需要指定一个对象作为锁,只有持有该锁的线程才能执行代码块。
public synchronized void synchronizedMethod() {
    // 同步的代码块
}

public void someMethod() {
    synchronized (lockObject) {
        // 同步的代码块
    }
}
2.ReentrantLock类:ReentrantLock是Java提供的Lock接口的具体实现类,它也可以实现线程的同步。与synchronized相比,ReentrantLock提供了更灵活的同步控制方式,并且支持公平锁和非公平锁。ReentrantLock需要手动获取锁和释放锁,因此需要在finally块中确保锁的释放。
Lock lock = new ReentrantLock();

public void someMethod() {
    lock.lock();
    try {
        // 同步的代码段
    } finally {
        lock.unlock();
    }
}
3.ReadWriteLock类:ReadWriteLock是Lock接口的另一个实现,它区分了读操作和写操作,允许多个线程同时读取共享资源,但在写操作时需要独占锁。ReadWriteLock有两个具体实现类:ReentrantReadWriteLock和StampedLock。
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();
    }
}

注:除了上述方式外,Java还提供了其他同步机制,如Semaphore、CountDownLatch、CyclicBarrier等,它们可以根据具体的需求来选择合适的同步机制。无论使用哪种方式,同步控制的目的都是保证多个线程对共享资源的安全访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值