Java-模拟面包房生产一个面包消费一个面包

涎涎原创约 584 字大约 2 分钟...JavaJava

152-Java-模拟面包房生产一个面包消费一个面包.mdopen in new window

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

package 线程的通信;

public class Bread {
	
	private boolean flag = false;//默认没有面包
	//生产面包的方法
	public synchronized void produce(int i) {
		//如果没有面包那么就生产面包,生产完后通知所有线程
		if(!flag) {
			System.out.println(Thread.currentThread().getName() + i +" 生产面包");
			flag = true;
			this.notifyAll();//生产完后通知所有监视当前对象的线程
		}else {
			//如果有面包,就等待
			try {
				System.out.println(Thread.currentThread().getName() + i + " 阻塞");
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	//消费面包的方法
	public synchronized void consumer(int i) {
		//如果有面包那么就消费面包,消费完后通知所有线程,消费面包
		if(flag) {
			System.out.println(Thread.currentThread().getName() + i + " 消费面包");
			flag = false;
			this.notifyAll();//消费完后通知所有监视当前对象的线程
		}else {
			//如果没有面包,就等待
			try {
				System.out.println(Thread.currentThread().getName() + i + " 阻塞");
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
package 线程的通信;
/**
 * 
* <p>Title: ConsumerThread</p>  
* <p>
* 	Description: 
* 	消费线程
* </p>  
* @author xianxian 
* @date 2019年7月18日
 */
public class ConsumerThread implements Runnable {

	private Bread bread;
	
	public ConsumerThread(Bread bread) {
		this.bread = bread;
	}
	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			bread.consumer(i);//消费面包
		}
	}

}
package 线程的通信;

/**
 * 
* <p>Title: ProduceThread</p>  
* <p>
* 	Description: 
* 生产线程
* </p>  
* @author xianxian 
* @date 2019年7月18日
 */
public class ProduceThread implements Runnable{

	private Bread bread;
	
	public ProduceThread(Bread bread) {
		this.bread = bread;
	}
	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			bread.produce(i);//生产面包
		}
	}
}
package 线程的通信;

public class Test {

	public static void main(String[] args) {
		Bread bread = new Bread();
		
		ProduceThread p1 = new ProduceThread(bread);
		new Thread(p1,"生产线程1 ").start();
		
		ProduceThread p2 = new ProduceThread(bread);
		new Thread(p2,"生产线程2 ").start();
		
		ConsumerThread c1 = new ConsumerThread(bread);
		new Thread(c1,"消费线程1 ").start();
		
		ConsumerThread c2 = new ConsumerThread(bread);
		new Thread(c2,"消费线程2 ").start();
	}
}

分割线


相关信息

以上就是我关于 Java-模拟面包房生产一个面包消费一个面包 知识点的整理与总结的全部内容,另附源码open in new window

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4