synchronized与lock同步

本文详细介绍了Java中的synchronized关键字在实现线程同步、对象锁、原子性和阻塞/等待方面的功能,以及Lock接口如ReentrantLock的替代作用,包括显式控制、可中断性、条件变量和可重入性。
摘要由CSDN通过智能技术生成

1.Synchronized关键字简单介绍

synchronized 是 Java 中用来实现同步的关键字,它可以应用于方法或代码块中。主要作用是确保多个线程在访问共享资源时能够按照既定的顺序执行,避免出现竞态条件(Race Condition)和数据不一致的情况。

2.synchronized关键字的几个重要功能

(1)实现同步:synchronized 关键字可以确保在同一时刻最多只有一个线程可以执行被 synchronized 修饰的方法或代码块。这样可以避免多个线程同时访问共享资源而导致的数据不一致或其他问题。

(2)对象锁:当synchronized修饰一个方法时,它锁定的是当前对象实例(即 this 对象),当synchronized修饰一个代码块时,可以指定锁定的对象。多个线程访问同一个对象时,只有一个线程能够获取到该对象的锁,其他线程会被阻塞,直到锁被释放。

(3)原子性:synchronized 关键字保证了被锁定的方法或代码块的执行是原子性的,即在同步块中的所有操作要么全部执行完毕,要么都不执行。

(4)阻塞和等待:当一个线程尝试获取一个已被其他线程持有的锁时,它会进入阻塞状态,直到获取到锁才能继续执行。其他线程在等待锁的释放时也会进入等待状态。

3.lock接口

(1).锁机制:Lock接口以及其实现类,如ReentrantLock,提供了一种可替代synchronized关键字的机制,用于实现线程同步和互斥。与synchronized相比,Lock提供了更多的灵活性和功能

(2)显式控制:使用Lock可以显式地获取锁和释放锁,这与synchronized相比更灵活。例如,在使用ReentrantLock时,可以使用lock()方法获取锁,使用unlock()方法释放锁。

(3)可中断性:与synchronized不同,Lock接口提供了一种可中断的锁获取方式,即线程在获取锁时可以响应中断。这可以避免线程长时间阻塞而无法中断的情况。

(4)条件变量:Lock接口提供了与锁关联的条件变量,可以用于线程之间的协调和通信。通过Condition接口的await()和signal()等方法,可以实现更高级别的线程等待和唤醒机制。

(5)可重入性:与synchronized一样,ReentrantLock支持线程的重入,即同一个线程可以多次获取同一把锁而不会造成死锁。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值