Java-模拟面包房生产一个面包消费一个面包
原创约 584 字大约 2 分钟...
152-Java-模拟面包房生产一个面包消费一个面包.md
注意
本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。
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-模拟面包房生产一个面包消费一个面包 知识点的整理与总结的全部内容,另附源码
Powered by Waline v2.15.4