同时运行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)上吗?