一、生产者消费者模式示例代码
-
示例需求
一个初始值为0的变量 两个线程交替操作 一个加1 一个减1 每个线程遍历5轮
-
示例代码
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 共享资源类 */ class ShareData{ //一个初始值为0的变量 private int num =0; private Lock lock=new ReentrantLock(); private Condition condition =lock.newCondition(); //变量+1方法 public void increment() throws Exception { //加锁 lock.lock(); try { //判断 while(num !=0){ //等待 不生产 condition.await(); } //生产 num++; System.out.println(Thread.currentThread().getName()+"递增," + "\t" + "数量:"+num); //通知唤醒 condition.signalAll(); }finally { //解锁 lock.unlock(); } } //变量-1方法 public void decrement() throws Exception { //加锁 lock.lock(); try { //判断 while(num ==0){ //等待 不生产 condition.await(); } //减产 num--; System.out.println(Thread.currentThread().getName()+"递减," + "\t" + "数量:"+num); //通知唤醒 condition.signalAll(); }finally { //解锁 lock.unlock(); } } } /** * @description: 生产者消费者模式示例代码(传统版) * 一个初始值为0的变量 两个线程交替操作 一个加1 一个减1 每个线程遍历5轮 * @author: xz */ public class ProdConsumerTraditionDemo { public static void main(String[] args) { ShareData shareData = new ShareData(); //A线程调用变量+1方法 new Thread(() -> { for (int i = 1; i { for (int i = 1; i
关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?