📄 producerconsumerproblem.java
字号:
class Producer extends Thread { private Buffer buffer; private int number; public Producer(Buffer buffer, int number) { this.buffer = buffer; this.number = number; } public void run() { for(int i = 0; i < 6;) { buffer.put(i); System.out.println("Producer # " + number + " Produce " + (i++)); try { Thread.sleep((int)(Math.random() * 2000)); } catch(InterruptedException e) { } } }}class Consumer extends Thread { private Buffer buffer; private int number; public Consumer(Buffer buffer, int number) { this.buffer = buffer; this.number = number; } public void run() { for(int i = 0; i < 3; i++) { int v = buffer.get(); System.out.println("Consumer # " + number + " Consume " + v); } }}class Buffer { private int contents; private boolean available = false; public synchronized int get() { while(!available) { try { this.wait(); } catch(InterruptedException e) { } } int value = contents; available = false; System.out.println("Take out " + contents); this.notify(); return value; } public synchronized void put(int value) { while(available) { try { this.wait(); } catch(InterruptedException e) { } } contents = value; available = true; System.out.println("put in " + contents); this.notifyAll(); }}public class ProducerConsumerProblem { public static void main(String[] args) { Buffer buffer = new Buffer(); new Producer(buffer, 101).start(); new Consumer(buffer, 200).start(); new Consumer(buffer, 201).start(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -