色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java開發模式中的生產者和消費者

王梓涵1年前8瀏覽0評論

在Java開發模式中,生產者和消費者是非常重要的兩個角色,它們在多線程編程中起到了關鍵性的作用。其主要特點在于解耦了生產者和消費者的關系,提高了系統的穩定性和可擴展性。

生產者-消費者模式所解決的問題,就是在多線程的系統中如何讓生產者和消費者協同工作,實現高效率、低耦合、支持并發的生產和消費。這種模式使用一個容器來解耦生產者和消費者的關系。生產者將數據放入容器中,而消費者則從容器中取出數據,同時通知生產者容器已經空了,可以繼續生產。

public class Producer implements Runnable {
private final BlockingQueue<Integer> queue;
private final AtomicInteger count;
public Producer(BlockingQueue<Integer> queue, AtomicInteger count) {
this.queue = queue;
this.count = count;
}
@Override
public void run() {
while (true) {
try {
queue.put(count.incrementAndGet());
System.out.println("Producer add a number: " + count.get());
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Consumer implements Runnable {
private final BlockingQueue<Integer> queue;
public Consumer(BlockingQueue<Integer> queue) {
this.queue = queue;
}
@Override
public void run() {
while (true) {
try {
int num = queue.take();
System.out.println("Consumer take a number: " + num);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(10);
AtomicInteger count = new AtomicInteger(0);
Producer producer = new Producer(queue, count);
Consumer consumer = new Consumer(queue);
ExecutorService service = Executors.newFixedThreadPool(2);
service.execute(producer);
service.execute(consumer);
Thread.sleep(10000);
service.shutdownNow();
}
}

上面的代碼中,我們定義了一個生產者和消費者類,它們使用阻塞隊列來進行生產和消費。在主函數中,我們定義了一個容量為10的LinkedBlockingQueue,并實例化了生產者和消費者類。我們使用ExecutorService開啟了兩個線程來執行生產和消費任務,同時通過AtomicInteger來對count值進行自增。在10秒之后,我們通過service.shutdownNow()來關閉線程。