import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
/**
* @program: emergency
* @description: 三个线程依次输出ABC ReentrantLock的Condition用法
* @author: fbl
* @create: 2021-01-13 07:36
**/
public class ThreadTest {
private static volatile boolean isThreadA = false;
public static void main(String[] args) {
ReentrantLock lock = new ReentrantLock();
Condition conditionA = lock.newCondition();
Condition conditionB = lock.newCondition();
Condition conditionC = lock.newCondition();
new Thread(() -> {
try {
lock.lock();
System.out.println("A");
isThreadA = true;
conditionB.signal();
conditionA.await();
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}, "thread A").start();
new Thread(() -> {
if (isThreadA) {
try {
lock.lock();
System.out.println("B");
conditionC.signal();
conditionB.await();
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}, "thread B").start();
new Thread(() -> {
if (isThreadA) {
try {
lock.lock();
System.out.println("C");
conditionA.signal();
conditionC.await();
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}, "thread C").start();
}
}
三个线程依次输出ABC ReentrantLock的Condition用法
最新推荐文章于 2025-03-10 22:57:05 发布