import java.util.ArrayList;
import java.util.List;public class GuoYuan { static boolean a = false;
static boolean b = false;
static List<Apple> apple = new ArrayList<>(); public static void main(String[] args) {
new GuoYuan().new Put().start();
new GuoYuan().new Out().start();
} class Put extends Thread { @Override
public void run() {
synchronized (String.class) {
while (true) {
apple.add(new Apple());
System.out.println("放一个苹果");
if (b == true) {
Object.class.notify();
b = false;
}
if (apple.size() == 5) {
System.out.println("苹果放满了,等待拿出");
try {
a = true;
String.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
} class Out extends Thread { @Override
public void run() {
synchronized (Object.class) {
while (true) {
if (apple.size()>0) {
apple.remove(0);
System.out.println("拿一个苹果");
}
if (a == true) {
String.class.notify();
a = false;
}
if (apple.size() == 0) {
System.out.println("苹果没了,等待放入");
try {
b = true;
Object.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
}

解决方案 »

  1.   


    public class GuoYuan { static boolean a = false;
    static boolean b = false;
    static List<Apple> apple = new ArrayList<>(); public static void main(String[] args) {
    Put put = new GuoYuan().new Put();
    Thread t = new Thread(put);
    Out out = new GuoYuan().new Out();
    Thread t2 = new Thread(out); t.start();
    t2.start();
    } class Put extends Thread { @Override
    public void run() {
    synchronized (String.class) {
    while (true) {
    while(a){
    try {
    String.class.wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    } if(apple.size() == 0){
    apple.add(new Apple());
    System.out.println("----->添加苹果");
    b = false;
    System.out.println("----->唤醒out:" + apple.size());
    }else{
    a = true;
    }
    String.class.notifyAll();
    }
    }
    }
    } class Out extends Thread { @Override
    public void run() {
    synchronized (String.class) {
    while (true) {
    while(b){
    try {
    String.class.wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    } if(apple.size()>0){
    apple.remove(0);
    System.out.println("拿出苹果");
    a = false;
    System.out.println("唤醒put苹果: "+ apple.size());
    }else{
    b = true;
    }
    String.class.notifyAll();
    }
    }
    }
    }
    }