当前位置: 首页 >科技 > 内容

🌟Java实现PV操作:生产者与消费者🌟

科技
导读 在多线程编程中,生产者-消费者模型是一个经典问题。它描述了两个或多个线程共享资源的场景:一个线程负责生产数据(生产者),另一个线程...

在多线程编程中,生产者-消费者模型是一个经典问题。它描述了两个或多个线程共享资源的场景:一个线程负责生产数据(生产者),另一个线程负责消费数据(消费者)。为了协调两者,我们通常会用到信号量(Semaphore)来模拟PV操作。

首先,定义一个缓冲区作为共享资源。生产者线程不断向缓冲区添加数据,而消费者线程则从缓冲区取出数据。通过`acquire()`和`release()`方法模拟P操作和V操作,确保生产者不会在缓冲区满时继续生产,消费者也不会在缓冲区空时尝试消费。

```java

import java.util.concurrent.Semaphore;

class PC {

private final Semaphore empty;

private final Semaphore full;

private final int capacity;

private int count = 0;

public PC(int cap) {

this.capacity = cap;

this.empty = new Semaphore(cap);

this.full = new Semaphore(0);

}

public void produce() throws InterruptedException {

empty.acquire();

synchronized (this) {

count++;

System.out.println("Produced: " + count);

}

full.release();

}

public void consume() throws InterruptedException {

full.acquire();

synchronized (this) {

count--;

System.out.println("Consumed: " + count);

}

empty.release();

}

}

```

通过这种方式,我们可以高效地管理多线程间的协作,避免资源竞争问题。✨

免责声明:本文由用户上传,如有侵权请联系删除!