重入锁ReentrantLock与conidition实现await()功能

简介: 重入锁ReentrantLock与conidition实现await()功能


先介绍几个Reentrantlock的重要的方法

lock():获得锁,如果锁已经被占用,则等待。
lockInterruptibly():获得锁,但优先响应中断。
trylock():尝试获得锁,如果成功,则返回true,失败则返回false。该方法不等待立即返回。
trylock(long time,TimeUnit unit):在给定的时间内尝试获得锁。
unlock():释放锁。
接下来开始上代码:

public class Gbf1 {

public static void main(String[] args) throws InterruptedException {
    var thread1 = new Thread1();
    Thread t1 = new Thread(thread1);
    t1.start();
    //睡眠两秒让condition.await先执行
    TimeUnit.SECONDS.sleep(3);
    //必须与lock一起用
    lock.lock();
    //通知thread1线程可以启动了
    condition.signal();
    lock.unlock();
}

}

class Thread1 implements Runnable {

public static ReentrantLock lock = new ReentrantLock();
public static Condition condition = lock.newCondition();

@Override
public void run() {
    System.out.println("thread1开始");
    try {
        TimeUnit.SECONDS.sleep(1);
        System.out.println("thread1挂起");
        //必须获得对象锁
        lock.lock();
        //等待
        condition.await();
        lock.unlock();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println("thead1启动");
}

}

目录
相关文章
|
3月前
|
存储 Java 程序员
synchronized的原理以及与ReentrantLock的区别
`synchronized`和`ReentrantLock`均为Java线程同步机制,确保共享资源的单一时刻独占访问。`synchronized`关键字直接嵌入JVM,可通过修饰方法或代码块实现对象锁或监视器锁,具备可重入性,依赖Mark Word进行锁状态管理。`ReentrantLock`则需显式调用`lock()`和`unlock()`,提供更灵活控制,如公平锁、尝试锁及条件变量。两者在语法、灵活性和异常处理上有所差异,但均支持可重入性。性能方面,随JDK优化,`synchronized`在某些场景下甚至优于`ReentrantLock`。选择使用哪个取决于具体需求和上下文。
|
1月前
|
Java 开发者
深入解析ReentrantLock与StampedLock的使用技巧
选择 `ReentrantLock`还是 `StampedLock`,应基于具体的应用场景。如果你的应用中读操作远多于写操作,并且希望利用乐观读锁来提高并发性能,那么 `StampedLock`是一个不错的选择。反之,如果你需要更复杂的锁行为,如公平性控制、条件变量或是需要响应中断的锁操作,则 `ReentrantLock`可能更加合适。理解每种锁的特点,并合理应用,是提升Java并发程序性能的关键。
16 3
|
4月前
|
安全 Java 开发者
Java多线程:synchronized关键字和ReentrantLock的区别,为什么我们可能需要使用ReentrantLock而不是synchronized?
Java多线程:synchronized关键字和ReentrantLock的区别,为什么我们可能需要使用ReentrantLock而不是synchronized?
59 0
|
5月前
|
监控 安全 Java
Java中的锁(Lock、重入锁、读写锁、队列同步器、Condition)
Java中的锁(Lock、重入锁、读写锁、队列同步器、Condition)
28 0
|
6月前
synchronized与ReentrantLock区别与联系
synchronized与ReentrantLock区别与联系
39 0
|
算法
ReentrantLock 是如何实现可重入性的?
ReentrantLock 是如何实现可重入性的?
58 0
|
程序员
ReentrantLock与synchronized的区别
ReentrantLock与synchronized的区别
|
安全 Java
并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition
并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition
95 0
并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition
|
Java
JUC基础(三)—— Lock锁 及 AQS(2)
JUC基础(三)—— Lock锁 及 AQS
94 0
|
算法 调度
JUC基础(三)—— Lock锁 及 AQS(1)
JUC基础(三)—— Lock锁 及 AQS
126 0