Java synchronized 实现生产者-消费者模型
生活随笔
收集整理的這篇文章主要介紹了
Java synchronized 实现生产者-消费者模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
synchronized
synchronized (臨界資源) {// 訪問臨界資源的代碼 }上述代碼的作用是給臨界資源“加鎖”,其他線程訪問臨界資源會被阻塞,目的是保證同一時間只有一個線程訪問臨界區。
wait
臨界資源.wait();某個線程調用了臨界資源的wait方法后,該線程被阻塞,直到被其他線程喚醒才能繼續執行。
notify
臨界資源.notify();某個線程執行該方法后,隨機喚醒一個試圖訪問臨界區但處于阻塞狀態的線程。
完整代碼 demo.java
import java.util.LinkedList; import java.util.Queue;public class demo {Queue<Integer> 臨界資源 = new LinkedList<>();final int MAX = 10;public static void main(String[] args) {demo d = new demo();生產者 producer = d.new 生產者();消費者 consumer = d.new 消費者();producer.start();consumer.start();}class 生產者 extends Thread {@Overridepublic void run() {while (true) { // 每隔0.5s生產一個商品synchronized (臨界資源) { // 臨界資源被占用,其他線程訪問臨界資源將被阻塞while (臨界資源.size() == MAX) { // 臨界區已滿,喚醒消費者線程,阻塞生產者線程,此處不用 if 是為了保險臨界資源.notify(); // 喚醒試圖訪問臨界資源的阻塞線程System.out.println("臨界區已滿");try {臨界資源.wait(); // 阻塞當前線程,等待其他線程喚醒} catch (InterruptedException e) {e.printStackTrace();}}臨界資源.add(1); // 生產一個商品臨界資源.notify(); // 喚醒消費者System.out.println("已生產1件商品,當前商品數量:" + 臨界資源.size());try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}}}}class 消費者 extends Thread {@Overridepublic void run() {while (true) { // 每隔0.5秒消耗一個商品synchronized (臨界資源) {while (臨界資源.size() == 0) { // 資源耗盡臨界資源.notify();System.out.println("臨界資源耗盡");try {臨界資源.wait();} catch (InterruptedException e) {e.printStackTrace();}}臨界資源.poll(); // 消耗一個商品臨界資源.notify(); // 喚醒生產者System.out.println("已消耗1件商品,當前商品數量:" + 臨界資源.size());try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}}}} }總結
以上是生活随笔為你收集整理的Java synchronized 实现生产者-消费者模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java UDP Demo
- 下一篇: 安卓在线按钮设计网站