【问题标题】:Running 2 threads simultaneously同时运行2个线程
【发布时间】:2010-10-20 14:48:54
【问题描述】:

在 IM 客户端的情况下。我已经制作了 2 个单独的线程来处理发送数据包(通过 std io)和接收数据包。问题是如何让这两个线程同时运行,这样我就可以在不断提示输入的同时随时准备好接收数据包?

我已经尝试过设置定时器,但是接收数据总是丢失。

【问题讨论】:

  • 一般来说,展示您的行为的 sn-p 代码对于获得高质量的答案大有帮助。

标签: java multithreading network-programming simultaneous-calls


【解决方案1】:

没有更多细节,很难给出完整的答案。不过,这里是启动两个线程的代码:

Thread thread1 = new Thread () {
  public void run () {
    // ... your code here
  }
};
Thread thread2 = new Thread () {
  public void run () {
    // ... your code here
  }
};
thread1.start();
thread2.start();

【讨论】:

  • 我的发送和接收线程分别依赖于发送和侦听 UDP 套接字。据我了解,您的示例代码似乎立即在代码中注入了线程。我为他们创建了一个可运行的类,那么您的方法是否适用于此类?
  • 我不知道“立即在代码中注入线程”是什么意思。也许您可以发布示例代码以进一步解释您的意思?
  • 在你的代码中能够在主线程中本地创建一个线程
  • @lamsait:我的代码创建了独立运行的新线程。无论您在何处执行它们,它们都会创建。我同意 Karlp 的观点,您似乎对线程有根本的误解。
  • 是的,我不得不承认,在编写这个 IM 服务程序时,70% 的语法、方法和类以前从未听说过。非常感谢您和 Karlp。
【解决方案2】:

我认为您可能错过了线程、流或两者的重要内容:-)

你可以像这样开始一个新线程:

myThread.start();

线程会被启动,jvm会自动执行run()方法。

如果线程运行方法正在从流中读取,并且它是唯一的读取,则它不会“错过”该流中的任何内容。

【讨论】:

    【解决方案3】:

    嗯,除非您有一台多处理器计算机,否则它们不会同时运行,但这通常不是问题。将会发生的情况是,每个线程都会获得一个时间片,或多或少是交替的。

    如果您丢失 I/O,那么真正的问题可能不是线程。你能告诉我们你是怎么读这些东西的吗?

    【讨论】:

      猜你喜欢
      • 2012-09-04
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 2016-07-28
      相关资源
      最近更新 更多