重入锁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启动");
}

}

目录
相关文章
|
7月前
|
安全 Java
Java多线程中的锁机制:深入解析synchronized与ReentrantLock
Java多线程中的锁机制:深入解析synchronized与ReentrantLock
105 0
|
9月前
|
Java
Java多线程同步锁、Lock锁和等待唤醒机制及代码演示
Java多线程同步锁、Lock锁和等待唤醒机制及代码演示
200 0
|
算法
ReentrantLock 是如何实现可重入性的?
ReentrantLock 是如何实现可重入性的?
71 0
|
安全 Java
并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition
并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition
101 0
并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition
|
安全 Java
synchronized 锁与 ReentrantLock 锁的区别
synchronized 锁与 ReentrantLock 锁的区别
123 0
可重入读写锁ReentrantReadWriteLock的demo使用
可重入读写锁ReentrantReadWriteLock的demo使用
|
Java
JUC基础(三)—— Lock锁 及 AQS(2)
JUC基础(三)—— Lock锁 及 AQS
101 0
|
算法 调度
JUC基础(三)—— Lock锁 及 AQS(1)
JUC基础(三)—— Lock锁 及 AQS
141 0
ReentrantLock是如何实现可重入性
ReentrantLock是如何实现可重入性
78 0
【JUC基础】04. Lock锁
java.util.concurrent.locks为锁定和等待条件提供一个框架的接口和类,说白了就是锁所在的包。
5528 0