2016-06-13 29 views
-1

我在Java 8中有一個2語句方法。第一條語句需要相當長的時間才能執行,重要的是,不能返回一個值。第二種說法很快。我如何執行並完成第一條語句,並確保第二條語句在第一條語句完成之前不會執行?代碼片段將非常感謝。如何確保Java方法中2條語句的順序和完整執行

public static Object returnMyClassFieldValue() { 
    setMyClassField(); // long running; can't return a value 
    return MyClass.valueOfMyField; // very quick 

}

+2

究竟發生了什麼問題?如果'setMyClassField'阻塞,那麼該方法的執行應該是順序的。如果'setMyClassField'沒有被阻塞,請在你的問題中添加更多的細節,這樣你可以得到更簡潔的答案。 – Makoto

+1

除非setMyClassField()異步顯式執行某些操作,否則它將在第二個語句執行前運行完成。 setMyClassField做什麼? – DaveH

+0

除非你做了一些特別的事情,否則你所描述的正是代碼聲明的工作方式。如果你在命令行中執行某些操作,或者可能在不等待響應的情況下向數據庫發送消息,那麼可能會跳過一個節拍,否則,如果你只是使用普通的Java,重新覆蓋。 – Compass

回答

1

該代碼被執行順序,所以第一個語句被執行第一和語句結束後的下一個被執行。

setMyClassField() 

返回後的方法完成的methodcall。所以沒有額外的代碼需要運行代碼順序。

如果你想在一個單獨的線程運行的方法,你可以使用線程和使用的方法

join() 

等待執行或使用線程池。

主題:https://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html

線程池:https://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html

結論: 你什麼都沒有做運行後的第一個第二個語句。

如果回答你的問題。

+0

join()的工作幾乎完美,除了它似乎殺死了我的等待光標的顯示。請參閱我上面的評論。非常感謝。 –

+0

因爲我被困在Swing中,所以我不是一個真正的FX專業版,但是您是什麼意思「殺死等待光標」?它消失了嗎?邏輯結構如下:顯示等待光標,啓動線程,加入線程,並在聯接後重新設置光標。我希望這對你有幫助。 – schmidi000

+0

我的基礎代碼顯示在http:// stackoverflow。com/questions/37780383/how-to-get-javafx-method-to-show-wait-cursor-return-result-from-a-completed-ta如果按原樣運行代碼,則按預期返回空列表但光標變爲等待,然後回到默認值。如果我替換新的線程(任務).start();與 線程t =新線程(任務); t.start(); t.join(); –