0

我正在使用 Eclipse IDE。

我问了这个问题 Multithread output not expected

这个问题对某些人来说似乎很愚蠢,但我仍然得到了一些有价值的意见。简而言之,我理解线程是不可预测的。好吧,在所有答案之后,我开始浏览网页以找出“线程不可预测”的原因?

我在某处读到线程调度取决于操作系统的进程调度,因为进程实际上是由线程组成的。

我的问题是:

1)如果我的计算机任意只运行一个进程,即。蚀。那么多线程会给出预期的结果吗?

2) eclipse 作为一个进程是否在默认情况下运行了更多我编写的线程。

请帮助我我真的很想知道为什么我无法预测我的代码的输出??

4

2 回答 2

2

是的,eclipse 有其他线程正在运行。此外,现代操作系统总是有其他系统进程在运行。此外,操作系统内核本身也有隐藏的线程在其内部运行(至少 Linux 是这样)。此外,即使这些事情都不存在,硬件本身也可以通过硬件中断来中断事情,例如当用户按下键盘上的键时。

线程有一种确定性形式,称为协作多线程。没有现代操作系统使用它,因为它不是很好。

于 2013-10-13T14:45:06.473 回答
0

您将 Eclipse、线程和 JVM 混为一谈。如果您编写应用程序以使用单个线程,例如只是一个主方法,并且您从 Eclipse 中运行,那么 Eclipse 可能会有很多不同的线程,并且运行您的应用程序的 JVM 也可以有多个线程(例如用于垃圾收集) . 但从可预测性的角度来看,您只需要担心应用程序的线程。当涉及到计时时,您只需要担心各种其他线程,例如,您可能会遇到不可预知的 GC 暂停。其他线程不会影响您的应用程序的流程。

如果您开始在应用程序中创建新线程,那么您需要开始担心线程如何交互。并不是说流程完全不可预测,而是您无法知道线程的相对时间,因此您必须在代码中考虑到这一点。

例如,假设您在一个类中有一个函数,该函数递增一个类成员变量并返回它:

int i = 0;
function foo() {
   ++i;
   // do some stuff
   return i;
}

如果这由两个不同的线程调用,则有时该函数可能会返回 1 和 2。有时它可能会向两个线程返回 2。

可能您需要编写具体的多线程示例,但您不了解正在发生的事情,以便我们帮助您解决这些问题。

于 2013-10-13T14:45:00.157 回答