熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java多線程--生產者與消費者

2013-11-23 19:47:43  來源: Java高級技術 

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

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

  package ;

  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 Autogenerated catch block

  eprintStackTrace();

  }

  }

  public synchronized int get() {

  if (!bFull)

  try {

  wait();//進入

  } catch (InterruptedException e) {

  // TODO Autogenerated catch block

  eprintStackTrace();

  }

  bFull = false;

  notify();

  return value;

  }

  }

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

  ************************生產者類********************************

  package ;

  class Producter extends Thread

  {

  Queue q;

  Producter (Queue q)

  {

  thisq=q;

  }

  public void run()

  {

  Systemoutprintln(********producter****start*****);

  for(int i=;i<;i++)

  {

  Systemoutprintln(producter :+i);

  qput(i);

  }

  Systemoutprintln(********producter*****end****);

  }

  }

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

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

  package ;

  class Consumer extends Thread

  {

  Queue q;

  Consumer(Queue q)

  {

  thisq=q;

  }

  public void run()

  {

  Systemoutprintln(********Consumer****start*****);

  while(true)

  {

  Systemoutprintln(Consumer:+qget());

  Systemoutprintln(********Consumer****end*****);

  }

  }

  }

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

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

  package ;

  public class Test {

  public static void main(String[] args) {

  Queue q=new Queue();

  Producter p=new Producter(q);

  Consumer c=new Consumer(q);

  pstart();

  cstart();

  }}

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

  OK實現完畢

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

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

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

  waitnotifynotifyAll是Object類的方法


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27459.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.