𝓝𝓮𝓶𝓸&博客

【Java】生产者消费者模式

设计一个生产电脑和搬运电脑类,要求生产出一台电脑就搬走一台电脑,如果没有新的电脑生产出来,则搬运工要等待新电脑产出;如果生产出的电脑没有搬走,则要等待电脑搬走之后再生产,并统计出生产的电脑数量。

package chapter9;

public class Job2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Computer c = new Computer();
		Producer pro = new Producer(c);
		Carrier car = new Carrier(c);
		new Thread(pro).start();
		new Thread(car).start();
		
	}

}

class Computer
{
	private String name = "dell";
	private String version = "1";
	private static int num = 1;
	public static int getNum() {
		return num;
	}

	public static void setNum(int num) {
		Computer.num = num;
	}
	private boolean flag = false;
	
	public String getVersion() {
		return version;
	}

	public void setVersion(String version) {
		this.version = version;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public synchronized void set(String name,String version)
	{
		if(!flag)
		{
			try {
				super.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		this.setName(name);
		try {
			Thread.sleep(300);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		this.setVersion(version);
		this.setNum(num+1);
		flag = false;
		super.notify();
	}
	public synchronized void get()
	{
		if(flag)
		{
			try {
				super.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
			try {
				Thread.sleep(300);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(this.getName()+"-->"+this.getVersion()+"-->"+Computer.getNum());
			flag=true;
			super.notify();
		
	}
}

class Producer implements Runnable
{
	private Computer c = null;

	public Producer(Computer c) {
		//super();
		this.c = c;
	}
	public void run()
	{
		boolean flag=false;
		for(int i = 0; i < 50; i++)
		{
			if(flag)
			{
				this.c.set("dell","1");
				flag = false;
			}
			else
			{
				this.c.set("hp","2");
				flag = true;
			}
		}
	}
}

class Carrier implements Runnable
{
	private Computer c = null;

	
	
	public Carrier(Computer c) {
		//super();
		this.c = c;
	}



	public void run()
	{
		for (int i = 0; i < 50; i++) {
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			this.c.get();
		}
	}
}
posted @ 2018-11-26 14:47  Nemo&  阅读(232)  评论(0编辑  收藏  举报