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用法
最新推荐文章于 2023-09-06 19:49:06 发布
该博客演示了一个Java并发编程的例子,使用ReentrantLock和Condition来确保三个线程按特定顺序(ABC)打印输出。通过条件变量conditionA、conditionB和conditionC,线程间进行同步并通知其他等待的线程继续执行,从而实现线程间的有序通信。
摘要由CSDN通过智能技术生成