【问题标题】:How to implement Asynchronous Inter Thread Communication in java?如何在java中实现异步线程间通信?
【发布时间】:2014-12-17 22:18:38
【问题描述】:

我正在开发一个代码,其中我有一个父线程和一个子线程。现在,我的场景如下所述,

  • 父线程启动子线程
  • 启动子线程后,它会继续工作。
  • 现在有一次发生子线程要调用主线程中的方法
  • 然后它使用该方法异步调用主线程。

我还想澄清一下,我知道java中的并发包,但它是同步执行的,即主线程必须等待子线程完成执行,但我希望主线程在子线程时继续工作正在执行。

我的实现就像SwingWorkerjava中的线程

【问题讨论】:

  • 子线程要调用主线程中的方法是什么意思?
  • 我不明白“现在有一次发生子线程想调用主线程中的方法,然后用该方法异步调用主线程。”请通过示例或一些伪代码或其他内容进行澄清,以帮助我更好地理解您的流程。
  • 这就像子线程再次将执行转移到父线程。
  • 不能。一个线程不能“调用”另一个线程。一个线程不能将执行“转移”到另一个线程。那些短语没有任何意义。一个线程可以启动另一个线程,一个线程可以等待另一个线程终止。一个线程可以将消息(即对象)放入队列中,另一个线程可以将消息从队列中取出并对其进行处理。等等。

标签: java multithreading asynchronous asynchronous-postback


【解决方案1】:

您不会“在主线程中调用方法”。你唯一能做的就是实现一个特定的机制,主线程主动地在子线程提供的对象上执行一个方法。

上面大致描述了 Swing 机制的作用:“主”线程(在这种情况下,事件调度线程)从全局队列中取出对象,如果对象的类型合适,则调用 run 方法Runnable 的关联实例。

要点:在 Swing 中,EDT 不会“继续工作”;它专门等待其他线程通过这种机制告诉它要做什么,否则只是阻塞,什么都不做。

【讨论】:

  • 是的,我想要类似的机制,但我不希望主线程等待子线程
  • 你要求的是不可能的,正如这个答案中所解释的那样。
  • 在 android ui 线程正在做它的工作,直到子线程将消息传输给它。所以,这是怎么可能的。
  • 请给我一些建议。我该如何实施。
  • 不,在 Android 上它与在 Swing 上相同。您所指的“工作”完全包括从事件队列中出列并对每个出列对象做出适当的反应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 2019-09-13
  • 2011-02-10
  • 2021-02-28
  • 2012-05-16
相关资源
最近更新 更多