重入锁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 开发者
揭秘!为什么大神都爱用Lock接口处理线程同步?
揭秘!为什么大神都爱用Lock接口处理线程同步?
71 5
|
4月前
|
存储 设计模式 安全
(五)深入剖析并发之AQS独占锁&重入锁(ReetrantLock)及Condition实现原理
在我们前面的文章《[深入理解Java并发编程之无锁CAS机制》中我们曾提到的CAS机制如果说是整个Java并发编程基础的话,那么本章跟大家所讲述的AQS则是整个Java JUC的核心。不过在学习AQS之前需要对于CAS机制有一定的知识储备,因为CAS在ReetrantLock及AQS中的实现随处可见。
|
5月前
|
监控 安全 Java
Java中的锁(Lock、重入锁、读写锁、队列同步器、Condition)
Java中的锁(Lock、重入锁、读写锁、队列同步器、Condition)
28 0
|
算法
ReentrantLock 是如何实现可重入性的?
ReentrantLock 是如何实现可重入性的?
58 0
|
安全 Java
synchronized 锁与 ReentrantLock 锁的区别
synchronized 锁与 ReentrantLock 锁的区别
110 0
|
安全 Java
并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition
并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition
95 0
并发编程-19AQS同步组件之重入锁ReentrantLock、 读写锁ReentrantReadWriteLock、Condition
|
算法 调度
JUC基础(三)—— Lock锁 及 AQS(1)
JUC基础(三)—— Lock锁 及 AQS
126 0
|
Java
JUC基础(三)—— Lock锁 及 AQS(2)
JUC基础(三)—— Lock锁 及 AQS
94 0
ReentrantLock是如何实现可重入性
ReentrantLock是如何实现可重入性
70 0
【JUC基础】04. Lock锁
java.util.concurrent.locks为锁定和等待条件提供一个框架的接口和类,说白了就是锁所在的包。
5518 0