2016-10-16 38 views
0

我想實現什麼Platform.runLater()但在當前線程上,程序與JavaFX無關,它是一個Tomcat服務器。RunLater在當前線程或給任務給當前線程以後運行

我試圖做Platform.runLater(this::foo);,但我很確定它沒有做任何事情。可能是因爲沒有JavaFX線程來執行它。

我寧願不打開ScheduledExecutorService,因爲它將成爲許多實例(很多線程)上的另一個線程,更不用說它需要運行的方法是​​,所以我聞到了一個死鎖。

我找不到任何有用的方法Thread.currentThread()runstart不帶參數)。

是否有另外一個選擇來做到這一點?

+0

你想在「稍後運行」的代碼中做什麼?因爲這種語義並不是真正的(直接)出現在面向請求/響應的Servlet API中。 –

+0

這是需要獨立於客戶端運行的代碼,簡而言之,它是一款遊戲,此代碼運行「AI」播放器。這就像我在JavaFX上遇到的問題:http://stackoverflow.com/questions/39395942/breaking-recursion-from-listeners @JohannesWachter – shinzou

+0

您無法爲任意現有線程安排任務。這隻適用於線程主動檢查要執行的任務隊列的框架。但是,這似乎是一個xy問題,您使用當前線程的願望源於嘗試解決問題,您不能以這種方式解決問題。 – Holger

回答

0

我使用newSingleThreadExecutor來達到這個目的,因爲它可以將多個可運行的隊列連接到一個隊列並順序運行,它可以從幾個地方給出任務並且它們將逐個運行它,這與platform.runLater類似。

讓該類的所有實例擁有一個引用的單線程解決了「多線程」問題。

它也不會導致死鎖,因爲它最多隻會等待另一個線程完成同步函數,然後運行這一個函數。