經常會有公司叫我們手撕代碼,比如網易,阿里,那我們是不是該掌握下呢。下面這段代碼來自《現代操作系統》進程與線程P49頁。
public class ProducerConsumer {public ProducerConsumer() { }private static final int N = 100;static Producer producer = new Producer();static Consumer consumer = new Consumer();static Monitor monitor = new Monitor();private static class Producer extends Thread {@Overridepublic void run() {//你生產的對象int item;while(true) {item = produce_item();monitor.insert(item); }}public int produce_item() {//TODO你需要生產的對象}}private static class Consumer extends Thread {@Overridepublic void run() {//你打算消費的對象int item;while(true) {item = monitor.remove();consumer_item(item); }}private int consumer_item(int item) {// TODO Auto-generated method stub}}private static class Monitor {//存放對象的容器LinkedList<Integer> buffer = new LinkedList<>();int count =0;public synchronized void insert(int item) {if(count == N) {try {wait();} catch (InterruptedException e) {e.printStackTrace();}}buffer.add(item);count++;if(count == 1) {notifyAll();}}public synchronized int remove() {if(count == 0) {try {wait();} catch (InterruptedException e) {e.printStackTrace();}}int val = buffer.getFirst();buffer.remove();count--;if(count == N-1) {notifyAll(); }return val;}public static void main(String[] args) {producer.start();consumer.start();}
}