Java线程回调线程上下文



如何确保在主线程的上下文中调用回调?

我使用的是ActiveMQ,特别是,我试图了解如何确保在创建ActiveMQ使用者的线程的上下文中执行回调。

我在侦听器/处理程序中获得的线程ID与创建使用者和设置侦听器的线程ID不同,因此我试图了解如何确保处理程序/侦听器中的代码在第一个线程线程上运行。

如果我创建了在侦听器中运行代码的线程,我可能会使用Executor和Future,但由于它是由activemq为我创建的,我希望弄清楚如何让侦听器在"main"线程的上下文中执行。

然后,我开始阅读关于java线程回调的一般内容,大多数文章都解释了在传递到实现可运行的线程中的类上调用方法。在我看来,回调中的任何代码都将仍然在我刚刚生成的线程的上下文中。

那么,我如何确保回调是在主线程的上下文中调用的呢?

在.net中,我可以使用SynchronizationContext或WPF中的Dispatcher,后者在后台使用此上下文。。

我一直在研究同步方法,但这些方法似乎访问了另一个线程中定义的数据变量,即"主"线程,在我的情况下,变量/数据是在使用者线程中创建的,我需要将它们传回来/确保它们在"主"程序上可用。

有趣的问题。我要做的第一件事是确保我知道哪个线程正在执行。一个简单的方法是将这个print语句放在回调中:System.out.println(线程.currentThread());

现在,让一个方法在一个特定的线程上运行:不要这么认为。获取线程的上下文不是Java的一部分。与.Net不同,JVM可能由不同的公司编写。IBM是一个非常好的公司。来自Oracle的JRocket是另一个。所以进入引擎盖下并不是那么容易。

我会再找一些,如果发现了会怎么样。

最新更新