我如何正确使用等待和通知

问题描述 投票:0回答:0

我试着让这两个线程交替,但我失败了。我认为逻辑是正确的,但执行是错误的。我该怎么办?这是一个生产者-消费者问题,我需要使用等待和通知来解决。

这里是生产者类:



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个线程的顺序是随机的,理论上应该是生产者然后是消费者等等

java multithreading semaphore thread-synchronization
© www.soinside.com 2019 - 2024. All rights reserved.