Java线程回调线程上下文

时间:2013-02-08 06:29:09

标签: java multithreading callback activemq

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

我正在使用ActiveMQ,具体而言,我正在尝试了解如何确保在创建activemq使用者的线程的上下文中执行回调。

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

现在,只要在特定线程上运行方法:不要这么认为。获取线程的上下文不是Java的一部分。与.Net不同,JVM可能由不同的公司编写。 IBM是一个非常好的人。来自Oracle的JRocket是另一个。因此,陷入困境并非易事。

我会更多地探讨一下,如果发现,请告诉你。