gpt4 book ai didi

Java 类作为监视器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:34 24 4
gpt4 key购买 nike

我需要编写一个 Java 程序,但在开始自己动手之前我需要一些建议。

我将要编写的程序将执行以下操作:

  • 模拟一家商店提前订购 donut

  • 一旦订购了 5000 个 donut ,商店将不再接受进一步的订单

好吧,我有点犹豫是应该编写 java 类来充当监视器还是应该改用 Java-Semaphore 类?

请多多指教。感谢您的帮助。

最佳答案

任何 java 对象都可以通过继承自 Object 的 wait/notify 方法充当监视器:

Object monitor = new Object();

// thread 1
synchronized(monitor) {
monitor.wait();
}

// thread 2
synchronized(monitor) {
monitor.notify();
}

只要确保在调用这些方法时持有监视器对象上的锁(不要担心wait,锁会自动释放以允许其他线程获取它)。这样,您就有了一种在线程间发送信号的便捷机制。

在我看来,您正在实现有界生产者-消费者队列。在这种情况下:

  1. 生产者将继续将项目放入共享队列中。
  2. 如果队列大小达到 5000,它将在共享监视器上调用 wait 并进入休眠状态。
  3. 当它放置一个项目时,它会在监视器上调用 notify 以唤醒正在等待的消费者。
  4. 消费者将继续从队列中取出元素。
  5. 当它拿取一个元素时,它会在监视器上调用notify来唤醒生产者。
  6. 如果队列大小达到 0,消费者调用 wait 并进入 hibernate 状态。

对于更简化的方法,在 BlockingQueue 的各种实现处有一个循环,它提供了上述开箱即用的功能!

关于Java 类作为监视器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10278432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com