先介绍几个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启动");
}
}