我试着让这两个线程交替,但我失败了。我认为逻辑是正确的,但执行是错误的。我该怎么办?这是一个生产者-消费者问题,我需要使用等待和通知来解决。
这里是生产者类:
public class Producer extends Thread {
private Container container;
private int num;
public Producer(Container s, int num) {
container=s;
this.num=num;
}
@Override
public void run() {
for (int i=0;i<10;i++) {
container.mettre(num);
System.out.println("producer "+i);
try {
sleep((long) (Math.random()*100));}
catch(InterruptedException e) {}
}
}
}
消费类:
public class Consumer extends Thread {
private Container container;
private int num;
public Consumer(Container s, int num) {
container=s;
this.num=num;
}
@Override
public void run() {
int valeur=0;
for (int i=0;i<10;i++) {
valeur=container.prendre();
System.out.println("Consumer "+i+" prend "+valeur);
}
}
}
这是容器类:
public class Container {
private int Contenu;
private boolean empty= false;
public synchronized int prendre() {
while(empty==true) {
try{
wait();
}
catch(InterruptedException e) {}
}
empty=true;
notify();
return Contenu;
}
public synchronized void mettre(int valeur) {
while(empty==false) {
try{
wait();
}
catch(InterruptedException e) {}
}
Contenu=valeur;
empty=false;
notify();
}
}
当我执行2个线程的顺序是随机的,理论上应该是生产者然后是消费者等等