Java多线程同步问题:信号量使用示例
在Java中,我们可以使用Semaphore
类来实现多线程的同步。下面是一个简单的信号量使用示例:
- 创建一个信号量(例如容量为3):
import java.util.concurrent.Semaphore;
public class SemaphoreExample {
private Semaphore semaphore = new Semaphore(3); // 信号量容量为3
public void producer() throws InterruptedException {
for (int i = 0; i < 5; i++) { // 生产者每轮生产5个资源
semaphore.acquire(); // 请求使用一个资源
System.out.println("Producer produced: " + i); // 打印生产和消耗的状态
semaphore.release(); // 释放一个资源
}
}
public void consumer() throws InterruptedException {
for (int i = 0; i < 5; i++) { // 消费者每轮消费3个资源
semaphore.acquire(); // 请求使用一个资源
System.out.println("Consumer consumed: " + i); // 打印生产和消耗的状态
semaphore.release(); // 释放一个资源
}
}
public static void main(String[] args) {
SemaphoreExample example = new SemaphoreExample();
Thread producerThread = new Thread(example::producer);
Thread consumerThread = new Thread(example::consumer);
producerThread.start(); // 启动生产者线程
consumerThread.start(); // 启动消费者线程
// 生产和消费完成后,主线程会等待所有线程执行完毕
}
}
在这个示例中,我们创建了一个具有3个资源的信号量。生产者和消费者通过请求和释放信号量来控制对资源的访问。
还没有评论,来说两句吧...