我有一個問題,讓說,我有這樣的代碼是:現在慢Java程序
public static void main(String[] args)
{
startMethod1();
startMethod2();
}
,如果startMethod1方法是非常大,需要花費大量的時間來執行它,startMethod2之前啓動startMethod1已完成。 如何讓這些方法一一執行?
我有一個問題,讓說,我有這樣的代碼是:現在慢Java程序
public static void main(String[] args)
{
startMethod1();
startMethod2();
}
,如果startMethod1方法是非常大,需要花費大量的時間來執行它,startMethod2之前啓動startMethod1已完成。 如何讓這些方法一一執行?
startMethod2之前startMethod1已經完成啓動。
這絕對不會發生。您可以啓動startMethod1
中的線程,該線程可能仍在運行,因爲startmethod2
開始。 startMethod2
之前不能startMethod1
除非startMethod1
電話startMethod2
如果你想等到startmethod1線程完成,你必須Thread.join()
它們或使用ExecutorService.awaitTermination()
如何使這些方法通過1執行從1開始?
就像你寫的代碼一樣。
如果我在startmethod1中使用線程,它需要時間來執行它,startMethod2運行在相同的時間startmethod1 – user1451415 2012-07-17 14:17:44
你離開你的問題 – Bohemian 2012-07-17 14:18:27
startmethod2不能啓動,即使它啓動的線程沒有 – 2012-07-17 14:19:08
如果您正在使用的線程,那麼請改變你的代碼,例如...但我假裝你做了,因爲另一個問題您的評論表明,你的意思是;-)
你可以看看等待()和notify()
調用wait()來告訴當前線程暫停,並通知()來喚醒它一次
這很遠太模糊是一個有用的答案。 – 2012-07-17 14:15:29
更改它,現在它不應該是模糊的,我將提供一個例子在一小時或兩個時,當我不着急 – 2012-07-17 14:23:18
他們已經做到了。您的方式,startMethod2
將不會開始,直到startMethod1
運行。
我的猜測是你正在使用某種緩衝的消息記錄API,因此一些輸出比你期望的要晚得多。可能甚至在程序結束之前不會沖洗。因此,你會得到錯誤的交錯輸出。
現在你已經告訴我們關於你的線索我會取消猜測... – djna 2012-07-17 14:20:04
我們可以在這裏有一些背景嗎? – mfrankli 2012-07-17 14:15:05
你在startMethod1()中啓動線程嗎?你是從startMethod1()調用startMethod2()嗎?如果沒有,我沒有看到爲什麼startMethod2()應該在StartMethod1()返回之前啓動的可能性。 Java按順序執行命令,在startMethod1()返回 – Korgen 2012-07-17 14:16:22
之前,將不會從main方法調用startMethod2()什麼是您的證據顯示startMethod2()在另一個方法結束之前啓動? – djna 2012-07-17 14:16:28