使用原语:wait() notify()控制
/**
* @Title: 生产者消费者问题.java
* @Package 线程
* @Description: TODO(用一句话描述该文件做什么)
* @author zxx
* @date 2021年2月2日 下午3:36:00
* @version V1.0
*/
package 线程;
/**
* @ClassName: 生产者消费者问题
* @Description: TODO(这里用一句话描述这个类的作用)
* @author 86176
* @date 2021年2月2日 下午3:36:00
*
*/
public class 生产者消费者问题 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Q q=new Q();
new Producer(q);
new Consumer(q);
System.out.println("stop:");
}
}
//获取同步序列
class Q{
int n;
boolean valueSet=false;
synchronized int get() {
if(!valueSet)
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Got: "+n);
valueSet=false;
notify();
return n;
}
synchronized void put(int n) {
if(valueSet)
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.n=n;
valueSet=true;
System.out.println("Put: "+n);
notify();
}
}
//生产者类
class Producer implements Runnable{
Q q;
/**
* <p>Title: </p>
* <p>Description: </p>
*/
public Producer(Q q) {
// TODO Auto-generated constructor stub
this.q=q;
new Thread(this,"Producer").start();
}
@Override
public void run() {
// TODO Auto-generated method stub
int i=0;
while(true) {
q.put(i++);
}
}
}
//消费者类
class Consumer implements Runnable{
Q q;
/**
* <p>Title: </p>
* <p>Description: </p>
*/
public Consumer(Q q) {
// TODO Auto-generated constructor stub
this.q=q;
new Thread(this,"Consumer").start();
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true) {
q.get();
}
}
}