public class Test {
public static void main(String[] args) {
AppleBox ab=new AppleBox();
Producer p=new Producer(ab);
Consumer c=new Consumer(ab);
Consumer cd=new Consumer(ab);
new Thread(p).start();
new Thread(c).start();
new Thread(cd).start();
}
}
class Apple{
int id;
Apple(int id){
this.id=id;
}
public String toString(){
return "apple "+id;
}
}
class AppleBox{
int index=0;
Apple[] apples=new Apple[5];
public synchronized void deposite(Apple apple){
while(index==apples.length){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notifyAll();
// System.out.println(Thread.currentThread().getName()+"开始放入苹果了");
apples[index]=apple;
index++;
}
public synchronized Apple withdraw(){
while(index==0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notifyAll();
//System.out.println(Thread.currentThread().getName()+"开始取出苹果了");
index--;
return apples[index];
}
}
class Producer implements Runnable{
AppleBox ab=null;
Producer(AppleBox ab){
this.ab=ab;
}
@Override
public void run() {
for(int i=0;i<20;i++){
Apple a=new Apple(i);
ab.deposite(new Apple(i));
System.out.println(Thread.currentThread().getName()+"生产了:"+a);
try {
Thread.sleep((int)(Math.random()*1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
AppleBox ab=null;
Consumer(AppleBox ab){
this.ab=ab;
}
@Override
public void run() {
for(int i=0;i<20;i++){
Apple a=ab.withdraw();
System.out.println(Thread.currentThread().getName()+"消费了"+a);
try {
Thread.sleep((int)(Math.random()*1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
AppleBox ab=new AppleBox();
Producer p=new Producer(ab);
Consumer c=new Consumer(ab);
Consumer cd=new Consumer(ab);
new Thread(p).start();
new Thread(c).start();
new Thread(cd).start();
}
}
class Apple{
int id;
Apple(int id){
this.id=id;
}
public String toString(){
return "apple "+id;
}
}
class AppleBox{
int index=0;
Apple[] apples=new Apple[5];
public synchronized void deposite(Apple apple){
while(index==apples.length){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notifyAll();
// System.out.println(Thread.currentThread().getName()+"开始放入苹果了");
apples[index]=apple;
index++;
}
public synchronized Apple withdraw(){
while(index==0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notifyAll();
//System.out.println(Thread.currentThread().getName()+"开始取出苹果了");
index--;
return apples[index];
}
}
class Producer implements Runnable{
AppleBox ab=null;
Producer(AppleBox ab){
this.ab=ab;
}
@Override
public void run() {
for(int i=0;i<20;i++){
Apple a=new Apple(i);
ab.deposite(new Apple(i));
System.out.println(Thread.currentThread().getName()+"生产了:"+a);
try {
Thread.sleep((int)(Math.random()*1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
AppleBox ab=null;
Consumer(AppleBox ab){
this.ab=ab;
}
@Override
public void run() {
for(int i=0;i<20;i++){
Apple a=ab.withdraw();
System.out.println(Thread.currentThread().getName()+"消费了"+a);
try {
Thread.sleep((int)(Math.random()*1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}