91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

java怎么實現生產者消費者模型

小億
82
2024-09-26 01:32:01
欄目: 編程語言

在Java中,生產者消費者模型可以通過使用線程同步機制(如synchronized關鍵字、Lock接口、Semaphore信號量等)和wait()、notifyAll()等待通知機制實現。這里給出一個簡單的示例,使用synchronized關鍵字和wait()、notifyAll()方法實現生產者消費者模型。

首先,創建一個共享資源類(共享隊列):

import java.util.LinkedList;
import java.util.Queue;

public class SharedQueue {
    private Queue<Integer> queue = new LinkedList<>();

    public synchronized void add(int item) {
        while (queue.size() == 10) {
            try {
                wait(); // 當前線程等待,釋放鎖
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        queue.add(item);
        notifyAll(); // 當前線程通知其他線程
    }

    public synchronized int remove() {
        while (queue.isEmpty()) {
            try {
                wait(); // 當前線程等待,釋放鎖
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        int item = queue.poll();
        notifyAll(); // 當前線程通知其他線程
        return item;
    }
}

接下來,創建生產者和消費者線程類:

public class Producer implements Runnable {
    private SharedQueue sharedQueue;

    public Producer(SharedQueue sharedQueue) {
        this.sharedQueue = sharedQueue;
    }

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            sharedQueue.add(i);
            System.out.println("生產者生產了: " + i);
            try {
                Thread.sleep(100); // 模擬生產耗時
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class Consumer implements Runnable {
    private SharedQueue sharedQueue;

    public Consumer(SharedQueue sharedQueue) {
        this.sharedQueue = sharedQueue;
    }

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            int item = sharedQueue.remove();
            System.out.println("消費者消費了: " + item);
            try {
                Thread.sleep(200); // 模擬消費耗時
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

最后,在主類中創建生產者和消費者線程并啟動:

public class Main {
    public static void main(String[] args) {
        SharedQueue sharedQueue = new SharedQueue();
        Producer producer = new Producer(sharedQueue);
        Consumer consumer = new Consumer(sharedQueue);

        Thread producerThread = new Thread(producer);
        Thread consumerThread = new Thread(consumer);

        producerThread.start();
        consumerThread.start();
    }
}

運行上述代碼,可以看到生產者和消費者線程交替執行,生產者生產商品放入共享隊列,消費者從共享隊列取出商品。這樣就實現了一個簡單的生產者消費者模型。

0
驻马店市| 亚东县| 咸宁市| 清流县| 靖西县| 广州市| 屯昌县| 扶风县| 射洪县| 城固县| 洛阳市| 宁波市| 英吉沙县| 云阳县| 普定县| 淄博市| 饶阳县| 紫阳县| 方山县| 兰西县| 日照市| 平阳县| 临夏市| 新乡县| 凌源市| 墨竹工卡县| 偏关县| 永州市| 电白县| 德昌县| 吴旗县| 和静县| 罗江县| 清涧县| 武强县| 钟山县| 清流县| 保德县| 廉江市| 寿阳县| 镇远县|