同时运行2个线程

Posted

技术标签:

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

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

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

【问题讨论】:

一般来说,展示您的行为的 sn-p 代码对于获得高质量的答案大有帮助。 【参考方案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,那么真正的问题可能不是线程。你能告诉我们你是怎么读这些东西的吗?

【讨论】:

以上是关于同时运行2个线程的主要内容,如果未能解决你的问题,请参考以下文章

在多核的系统中,同一个进程的2个线程可以分别同时运行在不同的核(cpu)上吗?

我可以同时运行多少个线程?

如何在jmeter中同时运行线程

关于同时运行多个tensorflow模型时线程创建失败

java线程池5个线程同时运行 有一个线程等待数秒无法继续运行被结束掉,而其他4个线程不受那个线程的影响

Jmeter应该同时执行查询,但同时查询不应该在并行线程中重复