管程法是并发协作模型“生产者/消费者模式”实现方式的一种。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| import org.w3c.dom.ls.LSOutput;
public class Test { public static void main(String[] args) { Container container = new Container(); Producer producer = new Producer(container); Consumer consumer = new Consumer(container); producer.start(); consumer.start(); } }
class Food{ int id; public Food(int id) { this.id = id; } }
class Container{
Food[] foods = new Food[10]; int count;
public synchronized void push(Food food){ while (count == foods.length){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } foods[count] = food; count++; this.notifyAll(); }
public synchronized Food consume(){ while(count == 0){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } count--; Food food = foods[count]; this.notifyAll(); return food; } }
class Producer extends Thread{ private Container container;
public Producer(Container container) { this.container = container; }
@Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("生产第"+i+"个馒头"); container.push(new Food(i)); } } }
class Consumer extends Thread{ private Container container;
public Consumer(Container container) { this.container = container; }
@Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("消费第"+container.consume().id+"个馒头"); } } }
|