一、生产者消费者模式示例代码
-
示例需求
一个初始值为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
关注打赏
热门博文
- Netty——网络编程 NIO(Selector处理accept事件)代码示例
- CompletableFuture异步编排(多任务组合)
- CompletableFuture异步编排(线程串行化代码示例)
- CompletableFuture异步编排(handle最终处理)
- CompletableFuture异步编排(计算完成回调代码示例)
- hutool工具导出excel代码示例
- java 获取音频、视频文件时长代码示例
- PostMan发送请求参数带有路径特殊字符会返回400错误(与URL字符及URL编码值有关)
- Rabbitmq与Erlang安装包下载图解
- idea2021.1版本SpringBoot项目日志的说明及使用