Selasa, 05 Juni 2012

Program java Producer/Consumer

package prodcongui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUI extends JFrame implements ActionListener
{
  private JButton start;
  private JPanel button_panel, prod_panel, con_panel;
  private JLabel prod=new JLabel("Producer is not producing.");
  private JLabel con=new JLabel("Consumer is not consuming.");
  private Container cp;
  private Thread producer=new Thread(new Runner(),"Producer");
  private Thread consumer=new Thread(new Runner2(),"Consumer");
  private int buffer[]={-1,-1,-1,-1};
  private int buffer_count=0, sum=0, read=0, write=0;
  public GUI()
  {
    super("Producer Consumer");
    cp=getContentPane();
    start=new JButton("Start Threads");
    button_panel=new JPanel();
    prod_panel=new JPanel();
    con_panel=new JPanel();
    button_panel.add(start);
    cp.add(button_panel,BorderLayout.SOUTH);
    prod_panel.add(prod);
    con_panel.add(con);
    cp.add(prod_panel,BorderLayout.NORTH);
    cp.add(con_panel,FlowLayout.CENTER);
    prod_panel.setBackground(Color.RED);
    con_panel.setBackground(Color.RED);
    start.addActionListener(this);
    setSize(330,200);
    setLocation(330,330);
    setResizable(false);
    setVisible(true);
  }
  public static void main(String[] args)
  {
    GUI app=new GUI();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
  public synchronized void set(int value)
  {
    while(buffer_count==buffer.length)
    {
      try
      {
        SwingUtilities.invokeLater(new ChangeProdCon("Producer can't produce "+"\n"+
                                                  "Producer must wait.",prod,Color.ORANGE,prod_panel));
        wait();
      }
      catch(InterruptedException e){}
    }
    SwingUtilities.invokeLater(new ChangeProdCon("Producer produced "+value,prod,Color.GREEN,prod_panel));
    buffer[write]=value;
    write=(write+1)%buffer.length;
    buffer_count++;
    notify();
  }
  public synchronized int get()
  {
    while(buffer_count==0)
    {
      try
      {
        SwingUtilities.invokeLater(new ChangeProdCon("Consumer can't consume "+"\n"+
                                                  "Consumer must wait.",con,Color.ORANGE,con_panel));
        wait();
      }
      catch(InterruptedException e){}
    }
    int readval=buffer[read];
    SwingUtilities.invokeLater(new ChangeProdCon("Consumer consumed "+readval,con,Color.GREEN,con_panel));
    read=(read+1)%buffer.length;
    buffer_count--;
    notify();
    return readval;
  }
  private class ChangeProdCon implements Runnable
  {
    JLabel lbl;
    String s1;
    Color col;
    JPanel pnl;
    public ChangeProdCon(String s, JLabel l, Color c, JPanel p)
    {
      lbl=l;
      s1=s;
      col=c;
      pnl=p;
    }
    public void run()
    {
      lbl.setText(s1);
      pnl.setBackground(col);
    }
  }
  public void actionPerformed(ActionEvent e)
  {
    producer.start();
    consumer.start();
  }
  private class Runner implements Runnable
  {
    public void run()
    {
      for(int i=10; i<=500; i++)
      {
        try
        {
          Thread.sleep((int)(Math.random()*3001));
          set(i);
        }
        catch(InterruptedException e){}
      }
      SwingUtilities.invokeLater(new ChangeProdCon("Producer has finished producing.",prod,Color.RED,prod_panel));
    }
  }
  private class Runner2 implements Runnable
  {
    public void run()
    {
      for(int i=10; i<=500; i++)
      {
        try
        {
          Thread.sleep((int)(Math.random()*3001));
          sum+=get();
        }
        catch(InterruptedException e){}
      }
      SwingUtilities.invokeLater(new ChangeProdCon("Consumer has finished consuming.",con,Color.RED,con_panel));
    }
  }
}

Related Posts:

  • PRINSIP USABILITY v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 false false false false EN-US X… Read More
  • Makalah Teori Bahasa dan Otomata v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 false false false false EN-US X… Read More
  • Makalah Organisasi dan Arsitektur Komputer v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 false false false EN-US X-NONE… Read More
  • Jompo dan Religiusme masyarakat Kampung Pasirkole Pasir Kole, sebuah kampung di desa Cikutamanah Kecamatan Sukasari Kabupaten Purwakarta memang terbilang terpencil, Letak kampung yang jauh dari kelurahan (harus menyebrang waduk jatiluhur) membuat kampung ini jauh terting… Read More
  • Andai Aku Menjadi Ketua KPK http://lombablogkpk.tempo.co/index/tanggal/213/Dede%20Abdullah.html Siapa sih yang tak kenal dengan KPK?, mulai dari kalangan buruh, petani, nelayan, guru, pedagang, bahkan supir angkot semua membicarakannya. KPK memang… Read More

0 komentar:

Posting Komentar

resep donat empuk ala dunkin donut resep kue cubit coklat enak dan sederhana resep donat kentang empuk lembut dan enak resep es krim goreng coklat kriuk mudah dan sederhana resep es krim coklat lembut resep bolu karamel panggang sarang semut

Copyright © 2025 Deja Area | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com | BTheme.net      Up ↑