模擬生產(chǎn)者與消費(fèi)者實(shí)例,生產(chǎn)者生產(chǎn)一個(gè)產(chǎn)品,消費(fèi)者就消費(fèi)一個(gè)產(chǎn)品 ,然后生產(chǎn)者再生產(chǎn),消費(fèi)者再消費(fèi)

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

  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();//進(jìn)入

  } 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****”);

  }

  }

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

  ****************************消費(fèi)者類*********************************

  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*****”);

  }

  }

  }

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

  *******************************主函數(shù)調(diào)用類**********************************

  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,實(shí)現(xiàn)完畢

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

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

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

  wait、notify、notifyAll是Object類的方法