2012-07-17 71 views
-4

我有一个问题,让说,我有这样的代码是:现在慢Java程序

public static void main(String[] args) 
{ 
startMethod1(); 
startMethod2(); 
} 

,如果startMethod1方法是非常大,需要花费大量的时间来执行它,startMethod2之前启动startMethod1已完成。 如何让这些方法一一执行?

+2

我们可以在这里有一些背景吗? – mfrankli 2012-07-17 14:15:05

+0

你在startMethod1()中启动线程吗?你是从startMethod1()调用startMethod2()吗?如果没有,我没有看到为什么startMethod2()应该在StartMethod1()返回之前启动的可能性。 Java按顺序执行命令,在startMethod1()返回 – Korgen 2012-07-17 14:16:22

+1

之前,将不会从main方法调用startMethod2()什么是您的证据显示startMethod2()在另一个方法结束之前启动? – djna 2012-07-17 14:16:28

回答

10

startMethod2之前startMethod1已经完成启动。

这绝对不会发生。您可以启动startMethod1中的线程,该线程可能仍在运行,因为startmethod2开始。 startMethod2之前不能startMethod1除非startMethod1电话startMethod2

如果你想等到startmethod1线程完成,你必须Thread.join()它们或使用ExecutorService.awaitTermination()

如何使这些方法通过1​​执行从1开始?

就像你写的代码一样。

+0

如果我在startmethod1中使用线程,它需要时间来执行它,startMethod2运行在相同的时间startmethod1 – user1451415 2012-07-17 14:17:44

+3

你离开你的问题 – Bohemian 2012-07-17 14:18:27

+0

startmethod2不能启动,即使它启动的线程没有 – 2012-07-17 14:19:08

1

如果您正在使用的线程,那么请改变你的代码,例如...但我假装你做了,因为另一个问题您的评论表明,你的意思是;-)

你可以看看等待()和notify()

调用wait()来告诉当前线程暂停,并通知()来唤醒它一次

+0

这很远太模糊是一个有用的答案。 – 2012-07-17 14:15:29

+0

更改它,现在它不应该是模糊的,我将提供一个例子在一小时或两个时,当我不着急 – 2012-07-17 14:23:18

3

他们已经做到了。您的方式,startMethod2将不会开始,直到startMethod1运行。

0

我的猜测是你正在使用某种缓冲的消息记录API,因此一些输出比你期望的要晚得多。可能甚至在程序结束之前不会冲洗。因此,你会得到错误的交错输出。

+0

现在你已经告诉我们关于你的线索我会取消猜测... – djna 2012-07-17 14:20:04