首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java生产者-消费者多线程基准测试。为什么它会停止?

java生产者-消费者多线程基准测试。为什么它会停止?
EN

Stack Overflow用户
提问于 2012-06-14 15:42:55
回答 4查看 447关注 0票数 1

请帮我解决我的问题。

我有服务器的java程序测试,像echo,一个基准测试工具。

要简化操作:

我从不同数量的线程向服务器发送100条消息(例如,模拟真实世界的生产者,例如,来自10个客户端或1个客户端,这并不重要),并接收响应。

我在消费者(comsumer=thread)方面也遇到了同样的情况。生产者和消费者生成事件(消息接收自...邮件发件人...等)

我的main使用onMessage()实现MyEvenListener,并对所有内容进行计数。

我的问题是,我不能接收所有100条消息并对它们进行计数,因为程序在消息发送后停止。我知道这很简单,但我不知道如何修复它。:(

下面是我的代码:

代码语言:javascript
运行
复制
public static void main(String[] args) throws InterruptedException {
    Main m = new Main();
    m.init();
}
private int mesReceved=0;
public void init() throws InterruptedException {
    Sender s = new Sender(15,this);
    Resender r = new Resender(15,this);
    r.createThreads();
    r.startThreads();
    s.createThreads();
    s.startThreads();
    System.out.println(mesReceved);

}
public void onEvent(String string) {
    mesReceved++;
}
EN

回答 4

Stack Overflow用户

发布于 2012-06-14 15:53:13

我看不出这段代码有什么问题。

你能试着简化这个问题吗?例如,减少线程数,直到问题停止。

在最简单的情况下,例如使用4个线程,会发生这种情况

  • 使用线程堆栈,
  • 使用调试或
  • 添加日志记录来诊断问题。
票数 1
EN

Stack Overflow用户

发布于 2012-06-14 19:37:53

在离开main之前,您是否真的在等待线程结束?您应该在main末尾的所有创建的线程上使用Thread.join,否则主线程将直接退出,而不会等待子线程完成。

票数 1
EN

Stack Overflow用户

发布于 2012-06-14 16:04:31

你是如何启动你的程序的?它可能会成功完成,然后关闭窗口。有几种方法可以解决这个问题。

脑海中浮现的一个想法是,您可以尝试在main中使用Thread.sleep(时间)。(其中时间是您希望它等待的时间,以毫秒为单位。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11028762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档