【问题标题】:Java 8 concurrent queue of semaphoresJava 8 并发信号量队列
【发布时间】:2021-04-15 14:19:09
【问题描述】:

我需要创建一个带有 n 个信号量的队列,以便那些由于大小而没有进入的进程,站在等待池中,直到队列空闲。当进程有信号量时,ThreadPool 在另一个线程中运行它的函数。我还需要一个带有信号量的进程 ID 的并发列表,以便它与信号量队列一起更新。如何使用现代 Java 8 模式做到这一点?

【问题讨论】:

    标签: java design-patterns concurrency


    【解决方案1】:

    让我印象深刻的是,有一个更简单的解决方案,它不涉及显式信号量和自定义代码(和错误)。

    只需使用有界BlockingQueue (javadoc) 并让线程使用put(...) 将项目添加到队列中。当队列已满时,put 将阻塞调用它的线程……直到队列空间可用。如果您不希望线程无限期阻塞,请使用 offer 并设置适当的超时时间。

    【讨论】:

      猜你喜欢
      • 2010-10-15
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多