生产者消费者模式(java)

所谓的生产者消费者模式,也就是线程之间的通信的经典实现。

多个线程处理同一个资源,并且处理的方式也不同,各个线程之间,彼此还有有交流。

比如,我放入篮子里水果后,你才可以往外拿。

1、需要线程停下来的时候,用wait

2、需要唤醒线程池中的线程时候,用notify



class Resource11
{
  private String name;
  private int num;
  private boolean flag;
  public synchronized void set(String name)
  {
	  
	  if(flag)
		  try{
			  wait();
		  }
	     catch(InterruptedException e){}
	  
	  this.name = name;
	  num++;
	  System.out.println("shenchanzhe"+num);
	  flag = true;
	  notify();
  }


  public synchronized void out()
  {
	  if(flag==false)
	  {
		  try{
			  wait();
		  }
	     catch(InterruptedException e){}
	  }
	  
	  num--;
	  System.out.println("消费者");
	  flag = false;
	  notify();
  }

}
//生产者线程
class Product implements Runnable
{
	private Resource11 r;
	
    public Product(Resource11 r)
    {
    	this.r = r;
    }
	public void run()
	{
		while(true)
		{
		r.set("apple");
		}
	}

}

class Con1 implements Runnable
{
	private Resource11 r;
	
    public Con1(Resource11 r)
    {
    	this.r = r;
    }
	public void run()
	{
		while(true)
		{
		r.out();
		}
	}

}
//消费者线程
public class ProCon {
	
	public static void main(String[] args)
	{
		Resource11 r = new Resource11();
		Product p = new Product(r);
		Con1 c = new Con1(r);
		Thread t1 = new Thread(p);
		Thread t2 = new Thread(c);
		t1.start();
		t2.start();
		
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值