实现生产者消费者模式

2023-12-05

我正在尝试编写一个邮件实用程序,将邮件放入队列中,然后由消费者线程使用。

我正在尝试实现典型的生产者-消费者模式,但出了问题。

我刚刚写了一个骨架,但该骨架没有按预期工作。

MailProducer.java

public class MailProducer implements Callable<Void>
 {

@Override
public Void call() throws Exception
{
    System.out.println("inside mail Producer");
    System.out.println("Thread executing = " +
                           Thread.currentThread().getName());
    return null;
}

}

邮件消费者.java

public class MailConsumer implements Callable<Void>
{

@Override
public Void call() throws Exception
{
    System.out.println("inside mail consumer");
    System.out.println("Thread executing = " + 
                        Thread.currentThread().getName());
    return null;
}

 }

最后是执行者

邮件执行器.java

  public class MailExecutor
  {

private static final int NTHREADS = 25;
private static final ExecutorService exec = 
                Executors.newFixedThreadPool(NTHREADS);

public static void main(String[] args)
{
    exec.submit(new MailConsumer());
    exec.submit(new MailProducer());

    System.out.println("inside main");

}

  }

现在当我运行程序时,我希望它能够来回生产者和消费者,以继续打印各自类中编写的内容。但相反,程序在打印以下行后挂起/不执行任何操作。出了什么问题?我错过了什么吗?

Output...(输出不是我预期的。出了什么问题?)

   inside mail consumer
   inside main
   Thread executing = pool-1-thread-1
   inside mail Producer
   Thread executing = pool-1-thread-2

您缺少共享队列。没有队列,你就一无所有。

生产者将工作放入队列中。消费者将工作从队列中剔除。用一个BlockingQueue, whose put() and take()方法是blocking来电。在单独的线程中运行生产者和消费者允许它们在调用这些方法时安全地阻塞。

生产者和消费者都不需要Callable; Runnable会做。使用Executor将它们结合在一起是个好主意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现生产者消费者模式 的相关文章

  • Kafka - 如何同时使用过滤器和过滤器?

    我有一个 Kafka 流 它从一个主题获取数据 并且需要将该信息过滤到两个不同的主题 KStream
  • 如何在 Android 应用程序中隐藏 Flutterwave API 密钥

    我正在构建一个 Android 应用程序 目前正在将 Flutterwave 集成到我的应用程序中以进行支付 建议我永远不要将 Flutterwave API 密钥放在我的应用程序上 那么我该如何隐藏这些键呢 我正在使用 Retrofit
  • Java LostFocus 和 InputVerifier,按反向制表符顺序移动

    我有一个 GUI 应用程序 它使用 InputVerifier 在产生焦点之前检查文本字段的内容 这都是很正常的 然而 昨天发现了一个问题 这似乎是一个错误 但我在任何地方都找不到任何提及它的地方 在我将其报告为错误之前 我想我应该问 我在
  • 通过Zuul上传大文件

    我在通过 zuul 上传大文件时遇到问题 我正在使用 apache commons 文件上传 https commons apache org proper commons fileupload https commons apache o
  • 我对线程失去了理智

    我想要这个类的对象 public class Chromosome implements Runnable Comparable
  • 未装饰窗户的 Windows Snap 功能?

    有谁知道如何允许未装饰的窗户使用此功能 唯一的选择就是重新实施它 有任何想法吗 谢谢 可停靠可能是唯一的JToolBar http docs oracle com javase tutorial uiswing components too
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • getCurrentSession 在网络中休眠

    我正在使用 hibernate 和 jsp servlet 编写一个基于 Web 的应用程序 我读过有关sessionFactory getCurrentSession and sessionFactory openSession方法 我知
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • 为什么解析这个 JSON 会抛出错误?

    我正在尝试解析这个 JSONObject query yahoo count 1 results rate Name USD INR id USDINR Time 12 19pm Date 10 31 2015 Bid 65 405 Ask
  • 为什么在读取字典时要锁定

    我对我正在阅读的一本关于线程的书 C 3 in a Nutshell 中的代码列表感到困惑 在 应用程序服务器中的线程安全 主题中 给出了以下代码作为 UserCache 的示例 static class UserCache static
  • 无需递归即可对可观察结果进行分页 - RxJava

    我有一个非常标准的 API 分页问题 您可以通过一些简单的递归来处理 这是一个捏造的例子 public Observable
  • UseCompressedOops JVM 标志有什么作用以及何时应该使用它?

    HotSpot JVM 标志是什么 XX UseCompressedOops我应该做什么以及什么时候使用它 在 64 位 Java 实例上使用它 与不使用它 时 我会看到什么样的性能和内存使用差异 去年大多数 HotSpot JVM 都默认
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • 检测到 JVM 正在关闭

    我有一个使用 addShutdownHook 处理 Ctrl C 的 Swing 应用程序 它工作正常 直到我的关闭任务之一调用一个在正常情况下更改 JLabel 文本的函数 此时它挂起 我认为问题是 Swing EDT 已终止或正在等待某
  • 什么是 Java2D 处理程序线程?

    我创建了一个使用 Hibernate 的示例 java 应用程序 当我进行线程转储时 我观察到一个名为 Java2D Disposer 的奇怪线程 有人能告诉我该线程的功能吗 AWT 系统中的某些实体需要最终确定以释放资源 最突出的例子是j
  • Java 的“&&”与“&”运算符

    我使用的示例来自 Java Herbert Schildt 的完整参考文献 第 12 版 Java 是 14 他给出了以下 2 个示例 如果阻止 第一个是好的 第二个是错误的 因此发表评论 public class PatternMatch

随机推荐

  • 条形图:更改 x 轴并添加线条

    我有一个动物园 其每日数据如下所示 gt head almorol 1973 10 02 1973 10 03 1973 10 04 1973 10 05 1973 10 06 1973 10 07 183 9 208 2 153 7 84
  • 如何序列化Java类的静态数据成员?

    当我们序列化对象的时候 静态成员是不会被序列化的 但是如果我们需要序列化的话 有什么办法吗 第一个问题是为什么需要序列化静态成员 静态成员与类相关联 而不是与实例相关联 因此在序列化实例时包含它们没有意义 第一个解决方案是使这些成员不是静态
  • 提高 Angular2 输入字段的性能

    我有一个包含日期的组件列表 格式为toLocaleString 和其他东西 在它们之上有一个用于创建新组件的组件 其中包含一个表单 其中包含一些使用 Angulars FormBuilder 构建的输入字段 当我快速输入时 验证会滞后 并且
  • MySQL 错误 1436:线程堆栈溢出,使用简单查询

    我正在对表进行非常简单的更新 这也会触发一个非常简单的触发器 并且它给了我错误 1436 Thread stack overrun 6136 bytes used of a 131072 byte stack and 128000 byte
  • Python 对象的良好风格

    在使用 Python 之前 我的大部分编程都是使用 C 或 Matlab 进行的 我没有计算机科学学位 几乎完成了物理学博士学位 但已经完成了一些课程和大量的实际编程 现在 我正在 Coursera 上学习算法课程 顺便说一句 由斯坦福大学
  • 如何设置App Maker数据源中的当前项目?

    这看起来很基本 但我似乎无法弄清楚如何手动设置当前项目以从数据源使用 举例来说 我有一个表 我注意到当我选择一行来编辑字段时 该行的项目将成为当前项目 因此如果我在该行上有一个链接以导航到页面 则该行的行所选项目将是导航页面的 dataso
  • 按组移动窗口计数不同项

    假设我有一个包含医院就诊的数据集 我的目标是生成一个变量 用于计算访问者在访问日期之前见过的唯一患者的数量 我经常使用 dplyr 的 group by 但这似乎有点棘手 我想我必须使用 group by n distinct 和 sum
  • Python 连接不显示 Swagger UI

    我使用 connexion 模块构建了一个基于 Python Flask 的 REST API 这与使用 swagger yml 文件定义 REST API 一样效果很好 该应用程序正在运行 但是当我导航到
  • eigen 是否有像 H.transpose()*H 这样的自转置乘法优化

    我浏览过 eigen 的教程https eigen tuxfamily org dox devel group TutorialMatrixArithmetic html 它说 注意 对于担心性能的 BLAS 用户 c noalias 2
  • 容器视图控制器示例[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 谁能给我指出创建自定义视图控制器作为容器视图控制器的任何好例子 我能找到的唯一文档是UIViewController 类参考 我觉得我需要更多的信息
  • Xcode 中的 Objective-C 类似 JavaDoc 文档? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 中的文档如何做 是否可以在 Objective C 中以 Xcode 4 在快速帮助中显示它们的方式编写类 方法文档 和 或以 Apple 自己的文档风格从中生成文档文档 现场
  • 如何在 Swift 中创建类数组

    我创建了两个类 StepsCell 和 WeightCell import UIKit class StepsCell let name Steps let count 2000 import UIKit class WeightCell
  • 内联 WSDL 而不是 wsdl:import

    目前我的 WSDL WebService带注释的类创建一个描述类的外部 wsdl 它通过以下方式做到这一点
  • 仅在悬停时过渡

    我有这个 hello opacity 0 transition all 220ms ease 0s hello hover opacity 1 我希望过渡效果仅在用户时可见hover in 而不是当它们悬停时 那可能吗 在本例中将过渡添加到
  • 如何在 PHP 中向 div 添加效果“隐藏(“慢”)”

    我有一个在 PHP 中名为 formscontainer 的 div 中重复多次的表单 同时 我想让表单提交时各自的 div 消失 效果隐藏 慢 这是示例代码
  • 使用特殊字符对数组进行排序 - iPhone

    我有一个带有法语字符串的数组 可以说 grener 和 exact 我想对其进行排序 例如 grener 是第一个 当我做 NSSortDescriptor descriptor NSSortDescriptor alloc initWit
  • 将项目添加到 IRfcTable

    我有一个函数 它的参数之一是一个表 T ITEMS 表项的类型 结构为 Z ITEM 具有两个字段 值 数量 如何向此表添加 Z ITEM 类型的项目 我所做的是以下代码 IRfcFunction fnct repo CreateFunct
  • C++ 最常用的 XML 库是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我通过谷歌快速搜索看到了一些图书馆 C 最常用的 XML 实现是什么 我计划使用 XML 作为程序配置的方式 我喜欢 XML 因为我将利用它的树状结
  • 从无任务上下文同步访问参与者属性

    整合actors使用现有代码似乎并不像苹果希望你相信的那么简单 考虑以下简单的参与者 actor Foo var value Int 0 尝试从任何地方访问此属性AppKit UIKit 无任务 控制器无法工作 因为每个Task是异步的 c
  • 实现生产者消费者模式

    我正在尝试编写一个邮件实用程序 将邮件放入队列中 然后由消费者线程使用 我正在尝试实现典型的生产者 消费者模式 但出了问题 我刚刚写了一个骨架 但该骨架没有按预期工作 MailProducer java public class MailP