一个初始值为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();
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://wwwxz.blog.csdn.net/article/details/122570162
内容来源于网络,如有侵权,请联系作者删除!