Classe PC - Applet que invoca os processos de Produção e Consumo

/*****************************************************
 * Programa Produtor-Consumidor
 * Autor: Luiz Angelo Estefanel
 * JDK 1.0.2 - Kawa 2.05a
 * Setembro de 1997
 * http://www.inf.ufsm.br/~lae/prodcons.html
 *****************************************************/

import java.awt.*;
import java.applet.*;

public class PC extends Applet {

    private Scrollbar horizontal;
    private Label numero;
    private Label Quadro_de_Mensagens;

    private B memoria_critica;

    private Integer N; // Tamanho do Buffer
    private Integer csleep; // Tempo máximo do Sleep do Consumidor (ms)
    private Integer psleep; // Tempo máximo do Sleep do Produtor (ms)

    public void init () { // Método que inicializa um applet
        // Declaração das variáveis
        Integer camount; // número de consumidores a serem criados
        Integer pamount; // número de produtores a serem criados
        Integer sleeptime; // regula a velocidade do processamento

        // Inicialização das variáveis
        Quadro_de_Mensagens = new Label ("Dormindo");
        numero = new Label(""); // contador de ocupação do buffer

        // Leitura dos parâmetros passados pelo tag <APPLET>
        try {
            N = new Integer (getParameter("buflenght"));
        } catch (Exception e) {
            N = new Integer ("10");
        }

        try {
            csleep = new Integer (getParameter("csleep"));
        } catch (Exception e) {
            csleep = new Integer ("700");
        }

        try {
            psleep = new Integer (getParameter("psleep"));
        } catch (Exception e) {
            psleep = new Integer ("700");
        }

        try {
            pamount = new Integer (getParameter("pamount"));
        } catch (Exception e) {
            pamount = new Integer ("1");
        }

        try {
            camount = new Integer (getParameter("camount"));
        } catch (Exception e) {
            camount = new Integer ("1");
        }

        try {
            sleeptime = new Integer (getParameter("sleeptime"));
        } catch (Exception e) {
            sleeptime = new Integer ("400");
        }

        // Define layout do ambiente gráfico
        makeGUI();

        // Inicializa a memória crítica e os processos que vão operá-la
        memoria_critica = new B (horizontal, numero, Quadro_de_Mensagens, N.intValue(),sleeptime.intValue());

        // Criação das threads produtoras
        for (int i=1; i<=(pamount.intValue()); ++i)
            MakeProducer(i);

        // Criação das threads consumidoras
        for (int i=1; i<=(camount.intValue()); ++i)
            MakeConsumer(i);
    }

    private void MakeProducer (int i) {
        // declara thread do tipo P
        P produtor = new P (memoria_critica, psleep.intValue(), i);
        // roda thread
        produtor.start();
    }

    private void MakeConsumer (int i) {
        // declara thread do tipo C
        C consumidor = new C (memoria_critica,csleep.intValue(), i);
        // roda thread
        consumidor.start();
    }

    private void makeGUI() {
        // Declaração das variáveis
        Button Mensagens;
        Image image1 = null;
        Image image2 = null;
        GridBagLayout gridbag;
        GridBagConstraints c;
        ImageCanvas ic1;
        ImageCanvas ic2;

        // inicialização das variáveis
        horizontal= new Scrollbar (Scrollbar.HORIZONTAL,0,1,0,N.intValue());
        Mensagens = new Button("Consumidor Produtor");
        image1 = getImage(getCodeBase(), "cons.jpg");
        ic1 = new ImageCanvas(image1, this, 88,80);
        image2 = getImage(getCodeBase(), "prod.jpg");
        ic2 = new ImageCanvas(image2, this, 112,80);
        gridbag = new GridBagLayout();
        c = new GridBagConstraints();

        setFont(new Font("Helvetica", Font.PLAIN, 12));
        setLayout(gridbag);

        c.fill = GridBagConstraints.BOTH;
        c.weightx = 1.0;
        c.gridwidth = 1;
        c.gridheight = 3;
        c.weighty = 1.0;

        gridbag.setConstraints(ic1,c);
        add(ic1);

        c.weighty = 0.0;
        c.gridwidth = 2;
        c.gridheight = 1;

        gridbag.setConstraints(numero,c);
        add(numero);

        c.gridwidth = GridBagConstraints.REMAINDER;
        c.gridwidth = 1;
        c.gridheight = 3;
        c.weighty = 1.0;

        gridbag.setConstraints(ic2,c);
        add(ic2);

        c.gridheight = 1;
        c.gridwidth = 2;
        c.gridx = 1;

        gridbag.setConstraints(horizontal,c);
        add(horizontal);

        c.gridx = 1;
        c.gridwidth = 2;

        gridbag.setConstraints(Mensagens,c);
        add(Mensagens);
        Mensagens.disable();

        c.gridx = 0;
        c.gridwidth = GridBagConstraints.REMAINDER;
        c.fill = GridBagConstraints.BOTH;

        gridbag.setConstraints(Quadro_de_Mensagens,c);
        add(Quadro_de_Mensagens);

        validate();
        resize(350,105);
    }
}