JAVA基础——多线程同步实现(生产者/消费者模型)

class Store2{                                        //定义“Store2”类
	private int seq;                                 //seq数值表示当前交易的次数
	private boolean available=false;
	public synchronized int get() {   //synchronized标识同步方法,定义get方法——消费者调用
		while(available==false) {
			try {
				wait();
			}
			catch(InterruptedException e) {}
		}
		available=false;
		notify();                                   //唤醒
		return seq;                                 //返回seq(当前交易次数)的值
	}
	
	public synchronized void put(int value) {       //定义put方法——生产者调用
		while(available==true) {
			try {
				wait();
			}catch(InterruptedException e) {}
		}
		seq=value;
		available=true;
		notify();
	}
}

class Producer1 extends Thread {                    //定义生产者线程
	private Store2 store;
	private int num;
	public Producer1(Store2 s,int num) {
		store=s;
		this.num=num;
	}
	public void run() {
		for(int i=0;i<10;i++) {
			store.put(i);                          //调用store示例里的put方法
			System.out.println("Producer #"+this.num+"put:"+i);
			try {
				sleep((int)(Math.random()*100));
			}catch(InterruptedException e) {}
		}
	}
}
 
class Comsumer1 extends Thread{                    //定义消费者线程
	private Store2 store;
	private int num;
	public Comsumer1(Store2 s,int num) {
		store=s;
		this.num=num;
	}
	public void run() {
		int value=0;
		for(int i=0;i<10;i++) {
			value=store.get();                     //将seq(当前交易次数)返回赋值给value
			System.out.println("Consumer #"+this.num+"got:"+value);
		}
	}
}

public class 线程锁{
	public static void main(String[] args) {
		Store2 s=new Store2();                //Store2、Producer1、Comsumer1实例化
		Producer1 p2=new Producer1(s,2);      
		Comsumer1 c2=new Comsumer1(s,2);
		p2.start();                           //启动p2、c2线程
		c2.start();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值