0

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

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

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

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

然后我开始阅读一般的 java 线程回调,大多数文章都解释了调用一个类的方法,你传递给实现 runnable 的线程。在我看来,该回调中的任何代码仍将在我刚刚生成的线程的上下文中。

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

在 .net 中,我可以使用 SynchronizationContext 或在 WPF 中使用此上下文的调度程序。

我一直在查看同步方法,但看起来这些方法访问另一个线程中定义的数据变量,即“主”线程,在我的情况下,变量/数据是在消费者线程中创建的,我需要将它们传回/ 确保它们在“主”线程上可用。

4

1 回答 1

0

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

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

我会再四处寻找,让你知道如果找到怎么办。

于 2013-02-08T16:41:55.947 回答