![](/img/trans.png)
[英]Java: Call a callback from another thread, in the context of the original thread
[英]Java threading callback thread context
如何確保在主線程的上下文中調用回調?
我正在使用ActiveMQ,具體地說,我試圖了解如何確保在創建activemq使用者的線程的上下文中執行回調。
我在偵聽器/處理程序中獲得的線程ID與創建使用者並設置偵聽器的線程ID不同,因此,我試圖了解如何確保處理程序/偵聽器中的代碼在第一個線程線程上運行。
如果我創建了在偵聽器中運行代碼的線程,則可能會使用Executor和Future,但是由於它是由activemq為我創建的,因此我希望弄清楚如何讓偵聽器在以下環境下執行: “主”線程。
然后,我通常開始閱讀有關Java線程回調的文章,並且大多數文章都介紹了在傳遞給實現可運行線程的線程的類上調用方法。 在我看來,該回調中的任何代碼仍將在我剛產生的線程的上下文內。
..so如何確保在主線程的上下文中調用回調?
在.net中,我可以使用SynchronizationContext或在WPF中,在后台使用此上下文的Dispatcher。
我一直在研究同步方法,但是看起來這些方法訪問另一個線程(即“主”線程)中定義的數據變量,在本例中,變量/數據是在使用者線程中創建的,因此我需要將它們傳遞回去/確保它們在“主”線程上可用。
有趣的問題。 我要做的第一件事是確保我知道正在執行什么線程。 一種簡單的方法是將此打印語句放入回調中:System.out.println(Thread.currentThread());
現在,就使方法在特定線程上運行而言:不要這樣。 獲取線程的上下文不是Java的一部分。 與.Net不同,JVM可以由不同的公司編寫。 IBM是一個非常好的公司。 Oracle的JRocket是另一個。 因此,深入了解並非易事。
我會進一步探討,並讓您知道是否找到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.