public class Bread {
private int id;
public Bread(int id) {
this.id = id;
}
public String toString(){
return String.valueOf(id);
}
}
public class MainTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
SyncStack s = new SyncStack();
Consumer consumer = new Consumer(s);
Producer producer = new Producer(s);
Thread thread1 = new Thread(consumer,"consumer");
Thread thread2 = new Thread(producer,"producer");
thread2.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
thread1.start();
}
}
public class SyncStack {
private int index = 0;
private Bread[] breads = new Bread[6];
public synchronized void push(Bread b){//入栈
while(index == breads.length){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
this.notify();
breads[index] = b;
index ++;
}
public synchronized Bread pop(){//出栈
while(index == 0){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
this.notify();
index --;
return breads[index];
}
}
public class Producer implements Runnable{
private SyncStack breadStack;
public Producer(SyncStack s){
breadStack = s;
}
public void run(){
for(int i=0; i<20; i++){
Bread bread = new Bread(i);
breadStack.push(bread);
System.out.println("Producer: "+bread);
try{
Thread.sleep((int)(Math.random() *1000));
}catch(InterruptedException e){
}
}
}
}
public class Consumer implements Runnable{
private SyncStack breadStack;
public Consumer(SyncStack s){
breadStack = s;
}
public void run(){
Bread b = null;
for(int i=0; i<20; i++){
b = breadStack.pop();
System.out.println("Consumer: "+b);
try{
Thread.sleep((int)(Math.random() *1000));
}catch(InterruptedException e){
}
}
}
}
线程(消费者与生产者)
最新推荐文章于 2022-10-22 20:23:32 发布