2012-07-17 23 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