Java并发多线程编程——生产者消费者模式示例(传统版本)
Posted 小志的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java并发多线程编程——生产者消费者模式示例(传统版本)相关的知识,希望对你有一定的参考价值。
一、生产者消费者模式示例代码
-
示例需求
一个初始值为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 <= 5; i++) try shareData.increment(); catch (Exception e) e.printStackTrace(); , "A线程").start(); //B线程调用变量-1方法 new Thread(() -> for (int i = 1; i <= 5; i++) try shareData.decrement(); catch (Exception e) e.printStackTrace(); , "B线程").start();
-
输出结果如下图:
以上是关于Java并发多线程编程——生产者消费者模式示例(传统版本)的主要内容,如果未能解决你的问题,请参考以下文章
多线程-并发编程-生产者消费者模式及非阻塞队列与阻塞队列实现