3

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

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

4

3 回答 3

21

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

Thread thread1 = new Thread () {
  public void run () {
    // ... your code here
  }
};
Thread thread2 = new Thread () {
  public void run () {
    // ... your code here
  }
};
thread1.start();
thread2.start();
于 2009-04-20T16:16:22.833 回答
7

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

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

于 2009-04-20T16:17:02.863 回答
7

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

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

myThread.start();

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

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

于 2009-04-20T16:23:23.083 回答