JUC版的生产者消费者
JUC版的生产者消费者
使用Lock对象进行上锁
使用Condition对象进行等待唤醒
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class JUCDemo {
public static void main(String[] args) {
// 实例化资源类
Data data = new Data();
// 生产者
new Thread(() -> {
for (int i = 0; i < 10; i++) {
data.increment();
}
}, "生产者").start();
// 消费者
new Thread(() -> {
for (int i = 0; i < 10; i++) {
data.decrement();
}
}, "消费者").start();
}
}
// 资源类
class Data {
// 资源
private int num = 0;
// Lock锁实例化
Lock lock = new ReentrantLock();
// 拿到condition
Condition condition = lock.newCondition();
public void increment() {
// 上锁
lock.lock();
try {
// 等待
while (num != 0) {
try {
condition.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 业务操作
num++;
System.out.println(Thread.currentThread().getName() + "===>" + num);
// 通知
condition.signalAll();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 解锁
lock.unlock();
}
}
public void decrement() {
// 上锁
lock.lock();
try {
// 等待
while (num == 0) {
try {
condition.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 业务操作
num--;
System.out.println(Thread.currentThread().getName() + "===>" + num);
// 通知
condition.signalAll();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 解锁
lock.unlock();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具