为什么Java程序在Thread中开始?

时间:2014-09-17 11:42:21

标签: java multithreading

这可能听起来很微不足道,但我想清除这个疑问。

为什么java程序在一个线程中启动?为什么它不是简单地从没有主线程的进程开始,我们可以创建自己的线程。人们是否将主线程用作控制生产代码中其他线程的主线程?或者它们是否使用主线程以外的单独主线程?

4 个答案:

答案 0 :(得分:6)

你似乎在这里有一个根本的误解。

Java程序从一个线程开始,因为你必须有一个Thread。程序中执行的所有内容都在线程中执行。

即使是单线程程序也有一个线程 - 它们只有一个。

在不启动线程的情况下启动进程将毫无意义。进程无法做任何事情,因为执行操作的唯一方法是执行指令,执行指令的唯一方法是在线程......

对于主线程,这完全取决于程序的体系结构。有些程序确实有一个主线程(虽然它实际上相当罕见)但其他许多程序没有。您的主线程可能会启动许多其他线程,然后立即退出,或者它可能会永远控制程序的整体流程。

要记住的重要一点是,就Java而言,除了在程序启动时启动它运行的事实以外,主线程并不特殊。该线程可以启动,暂停,停止,退出,程序将继续运行。该程序仅在调用exit或每个非守护程序线程结束时结束。

答案 1 :(得分:2)

Java代码仅在Threads中执行。如果它运行,它将在一个线程中运行。乍一看,这可能看起来像开销,但实际上它使VM变得简单(好,更简单)。 VM不必区分“在线程中运行”和“在主进程中运行”。

Thread对象还保存有关该线程执行的信息,如使用的CPU时间等。它与堆栈,监视器(同步对象)等相关联。如果主线程不是线程,则VM将必须以不同的方式管理所有这些,但在线程和主要过程上保持一致。

答案 2 :(得分:0)

我认为你的意思是java Swing应用程序?命令行java应用程序默认情况下不启动新线程,所有内容都只在主线程中运行。 Swing使用一个单独的线程来处理UI事件(臭名昭着的Event Dispatch Thread - 参见http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html

答案 3 :(得分:0)

java程序在一个线程中启动是错误的。当java程序将要运行时,它是一个单一的进程,并产生最终输出到用户JVM将其任务划分为不同的线程,以更优化的方式利用CPU周期和内存管理.TO运行单个程序JVM需要做执行该程序之前的一些操作。如果所有动作都是一个过程那么它对内存的利用率就不高。因为我们不能为同样的事情提供不同的存储空间。