多线程-生产消费者模式
package com.thread.cusproform;
```java
/**
* @Author yg_wu
* @Description //生产消费者模式,生产一个商品消费一个商品
* @Date 2021/8/6 10:40
**/
public class CPFTTest {
public static void main(String[] args) {
MessageObject messageObject = new MessageObject(true);
ProT proT = new ProT(messageObject);
CusT cusT = new CusT(messageObject);
new Thread(cusT).start();
new Thread(proT).start();
}
}
/**
* @Author yg_wu
* @Description //生产完成开关对象
* @Date 2021/8/6 10:43
**/
class MessageObject {
private boolean flag;
public MessageObject(boolean flag) {
this.flag = flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public boolean isFlag() {
return flag;
}
public void function() throws Exception{
synchronized (MessageObject.class) {
if (flag) {
Thread.sleep(3000);
System.out.println("生产者生产了一个商品");
Thread.sleep(1000);
flag = false;
} else {
Thread.sleep(2000);
System.out.println("消费者消费了一个商品");
flag = true;
}
}
}
}
//生产线程负责调用生产线不断生产
class ProT extends Thread {
public MessageObject mo;
public ProT(MessageObject mo) {
this.mo = mo;
}
@Override
public void run() {
try {
while (true){
mo.function();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
//消费线程辅助调用消费线不断消费
class CusT extends Thread {
public MessageObject mo;
public CusT(MessageObject mo) {
this.mo = mo;
}
@Override
public void run() {
try {
while (true) {
mo.function();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
