2

運動中

あなたがファッションとミシンを持っているプログラムを作成して、オペレーターがデータの幅と高さを入力し、仕事を実行するためにミシンに通知します。

データを受信して​​処理し、Operatorマシンに通知します。 Machineデータを受け取り、プロセスを終了します。

ただし、実行すると、Maquinaスレッドに通知されず、マシンとマシンOperatorがデータを受信する無限ループに陥ります。

public class Operator extends Thread {

    Scanner in = new Scanner(System.in);
    int altura, largura;
    public void run() {
        while(true) {
            synchronized (this) {
                System.out.print("Altura: ");
                altura = in.nextInt();
                System.out.print("Largura: ");
                largura = in.nextInt();
                notify();
            }
        }
    }

    public String getForma() {
        return "Forro de mesa : " + (altura * largura);
    }
}

public class Maquina extends Thread{

    private Operator c;

    public Maquina(Operator c) {
        this.c = c;
    }


    public void run() {
        while(true) {
            synchronized (c) {
                try {

                    System.out.println("Waiting shape...");
                    c.wait();

                    System.out.println("init drawn...");
                    Thread.currentThread().sleep(3000);

                    System.out.println("drawing...");
                    Thread.currentThread().sleep(3000);

                    System.out.println(c.getForma() + ", finalized");

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
4

1 に答える 1