21xrx.com
2024-11-25 05:14:35 Monday
登录
文章检索 我的文章 写文章
Java多线程实现生产者消费者模式的代码有哪些?
2023-06-27 10:07:46 深夜i     --     --
Java 多线程 生产者 消费者 代码

Java多线程是一种高效的编程方式,可以处理并发和并行的任务,其中实现生产者消费者模式是Java多线程编程中的常见操作。生产者消费者模式是指一种生产者生成数据,而消费者则不断地取走生产者生成的数据的模式。

在Java多线程编程中,实现生产者消费者模式需要使用线程同步的概念。以下是一些实现生产者消费者模式的Java多线程代码:

1.基于synchronized关键字实现生产者消费者模式。


public class ProducerConsumer {

  private static final int MAX_BUFFER_SIZE = 10;

  private List<Integer> buffer = new ArrayList<>();

  public void produce() throws InterruptedException {

    synchronized (this) {

      while (buffer.size() == MAX_BUFFER_SIZE) {

        wait();

      }

      buffer.add(1);

      notify();

    }

  }

  public void consume() throws InterruptedException {

    synchronized (this) {

      while (buffer.size() < 1) {

        wait();

      }

      buffer.remove(0);

      notify();

    }

  }

}

2.基于ReentrantLock实现生产者消费者模式。


public class ProducerConsumer {

  private static final int MAX_BUFFER_SIZE = 10;

  private List<Integer> buffer = new ArrayList<>();

  private final ReentrantLock lock = new ReentrantLock();

  private final Condition notFull = lock.newCondition();

  private final Condition notEmpty = lock.newCondition();

  public void produce() throws InterruptedException {

    lock.lock();

    try {

      while (buffer.size() == MAX_BUFFER_SIZE) {

        notFull.await();

      }

      buffer.add(1);

      notEmpty.signalAll();

    } finally {

      lock.unlock();

    }

  }

  public void consume() throws InterruptedException {

    lock.lock();

    try {

      while (buffer.size() < 1) {

        notEmpty.await();

      }

      buffer.remove(0);

      notFull.signalAll();

    } finally {

      lock.unlock();

    }

  }

}

3.使用BlockingQueue实现生产者消费者模式。


public class ProducerConsumer {

  private BlockingQueue<Integer> buffer = new ArrayBlockingQueue<>(10);

  public void produce() throws InterruptedException {

    while (true) {

      buffer.put(1);

    }

  }

  public void consume() throws InterruptedException {

    while (true) {

      buffer.take();

    }

  }

}

这些代码块展示了实现Java多线程中的生产者消费者模式的几种方法。它们使用同步,锁和阻塞队列等不同的机制来处理并发任务。使用哪种机制取决于具体的情况和需求。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复