Versão atual:

Espera e notificação de threads (wait e notify)

Boa noite companheiros, estou estudando o capitulo 9 do livro da katty scjp6, e estou tentando fazer um exercicio que envolve threads e os métodos wait() e notify().

O contexto do exercício é mais ou menos este:

  • Fazer um programa onde se tenha um costureiro e uma máquina de costura, assim que o costureiro entrar com os dados largura e altura, notificar a máquina de costura para que ela realize seu trabalho.

Estou tentando fazer o exercicio mas não esta dando certo os bloqueios dos objetos. Segue o código que fiz.

Classe que deveria notificar a máquina para executar a costura do forro de mesa

package thread.maqcostura;

import java.util.Scanner;

public class Costureiro 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);
    }
}

Classe que representa a maquina de costura

package thread.maqcostura;


public class Maquina extends Thread{

    private Costureiro c;

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


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

                    System.out.println("Aguardando forma...");
                    c.wait();

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

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

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

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

Assim que entro com os dados (altura, largura) a thread fica sempre me pedindo para entrar com os dados infinitamente. Pra mim ao digitar os dados o notify() seria chamado colocando a thread que informei os dados em "tipo pausa" e aguardaria a execução da máquina.

Versão(1):

Ver a versão formatada

Espera e notificação de threads (wait e notify)

Comentário

new question