如上圖所示,併發(concurrency)是指在一個cpu處理的線程中一直不斷的切換任務,最終給人的感受就像同時執行了多個任務。而並行(parallellism)在多個cpu同一時間處理多個任務(在一個cpu中出現不了並行的狀態)html
/** * 生產者生產出來的產品交給店員 */ public synchronized void produce(){ if(this.product >= MAX_PRODUCT){ try{ wait(); System.out.println("產品已滿,請稍候再生產"); } catch(InterruptedException e){ e.printStackTrace(); } return; } this.product++; System.out.println("生產者生產第" + this.product + "個產品."); notifyAll(); //通知等待區的消費者能夠取出產品了 }
/** * 消費者從店員取產品 */ public synchronized void consume() { if(this.product <= MIN_PRODUCT) { try { wait(); System.out.println("缺貨,稍候再取"); } catch (InterruptedException e) { e.printStackTrace(); } return; } System.out.println("消費者取走了第" + this.product + "個產品."); this.product--; notifyAll(); //通知等待去的生產者能夠生產產品了 }
在傳統的模式中生產者和消費者在同一線程中得意實現就算線程併發(concurrency),若是生產者模式和消費者模式在不一樣的線程中進行實現,就算作並行(parallellism)。
參考文檔:https://www.cnblogs.com/wxd01...
圖片來源:https://zhidao.baidu.com/ques...算法