线程同步异步——消费者生产者问题java实现

使用原语:wait() notify()控制

/**   
* @Title: 生产者消费者问题.java 
* @Package 线程 
* @Description: TODO(用一句话描述该文件做什么) 
* @author zxx
* @date 2021年2月2日 下午3:36:00 
* @version V1.0   
*/
package 线程;

/** 
* @ClassName: 生产者消费者问题 
* @Description: TODO(这里用一句话描述这个类的作用) 
* @author 86176
* @date 2021年2月2日 下午3:36:00 
*  
*/
public class 生产者消费者问题 {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
		Q q=new Q();
		new Producer(q);
		new Consumer(q);
		System.out.println("stop:");
	}

}

//获取同步序列
class Q{
	int n;
	boolean valueSet=false;
	synchronized int get() {
		if(!valueSet)
			try {
				wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("Got: "+n);
			valueSet=false;
			notify();
			return n;
		
	}
	synchronized void put(int n) {
		if(valueSet)
			try {
				wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
		this.n=n;
		valueSet=true;
		System.out.println("Put: "+n);
		notify();
	}
}

//生产者类
class Producer implements Runnable{

	Q q;
	/** 
	* <p>Title: </p> 
	* <p>Description: </p>  
	*/
	public Producer(Q q) {
		// TODO Auto-generated constructor stub
	    this.q=q;
	    new Thread(this,"Producer").start();
	}
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
	     int i=0;
	     while(true) {
	    	 q.put(i++);
	     }
	}
	
}

//消费者类
class Consumer implements Runnable{
	Q q;
	/** 
	* <p>Title: </p> 
	* <p>Description: </p>  
	*/
	public Consumer(Q q) {
		// TODO Auto-generated constructor stub
	    this.q=q;
	    new Thread(this,"Consumer").start();
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true) {
			q.get();
		}
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值