模擬生產者與消費者實例,生產者生產一個產品,消費者就消費一個產品 ,然后生產者再生產,消費者再消費

  ***********************核心方法類****************

  package test.com;

  class Queue

  // key

  {

  int value;

  boolean bFull = false;

  public synchronized void put(int i) {

  if (!bFull) {

  value = i;

  bFull = true;

  notify();// 必須用在synchronized

  }

  try {

  wait();// 必須捕獲異常

  } catch (InterruptedException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  }

  public synchronized int get() {

  if (!bFull)

  try {

  wait();//進入

  } catch (InterruptedException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  bFull = false;

  notify();

  return value;

  }

  }

  package test.com;

  class Producter extends Thread

  {

  Queue q;

  Producter (Queue q)

  {

  this.q=q;

  }

  public void run()

  {

  System.out.println(“********producter****start*****”);

  for(int i=1;i《10;i++)

  {

  System.out.println(“producter :”+i);

  q.put(i);

  }

  System.out.println(“********producter*****end****”);

  }

  }

  **********************************************************************

  ****************************消費者類*********************************

  package test.com;

  class Consumer extends Thread

  {

  Queue q;

  Consumer(Queue q)

  {

  this.q=q;

  }

  public void run()

  {

  System.out.println(“********Consumer****start*****”);

  while(true)

  {

  System.out.println(“Consumer:”+q.get());

  System.out.println(“********Consumer****end*****”);

  }

  }

  }

  ************************************************************************

  *******************************主函數調用類**********************************

  package test.com;

  public class Test {

  public static void main(String[] args) {

  Queue q=new Queue();

  Producter p=new Producter(q);

  Consumer c=new Consumer(q);

  p.start();

  c.start();

  }}

  *****************************************************************

  OK,實現完畢

  wait方法——把線程放入wait set

  notify方法——從wait set拿出線程

  notifyAll方法——從wait set拿出所有線程

  wait、notify、notifyAll是Object類的方法