Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中实现异步线程间通信?_Java_Multithreading_Asynchronous_Asynchronous Postback - Fatal编程技术网

如何在java中实现异步线程间通信?

如何在java中实现异步线程间通信?,java,multithreading,asynchronous,asynchronous-postback,Java,Multithreading,Asynchronous,Asynchronous Postback,我正在开发一个代码,其中我有一个父线程和一个子线程。现在,我的场景如下所述 父线程启动子线程 启动子线程后,它将继续执行它正在执行的操作 现在有一次,子线程希望调用主线程中的方法 然后使用该方法异步调用主线程 我还想澄清一下,我知道java中的并发包,但它是同步执行的,即主线程必须等待子线程完成执行,但我希望主线程在子线程执行时继续工作 我的实现类似于java中的SwingWorkerThread您无法“在主线程中调用方法”。您唯一能做的就是实现一种特定的机制,通过这种机制,主线程可以主动地

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

  • 父线程启动子线程
  • 启动子线程后,它将继续执行它正在执行的操作
  • 现在有一次,子线程希望调用主线程中的方法
  • 然后使用该方法异步调用主线程
我还想澄清一下,我知道java中的并发包,但它是同步执行的,即主线程必须等待子线程完成执行,但我希望主线程在子线程执行时继续工作

我的实现类似于java中的
SwingWorker
Thread

您无法“在主线程中调用方法”。您唯一能做的就是实现一种特定的机制,通过这种机制,主线程可以主动地在子线程提供的对象上执行一个方法

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


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

这是什么意思“子线程想调用主线程中的方法”?我不明白“现在有一次,子线程希望在主线程中调用该方法,然后使用该方法异步调用主线程。“请用一个示例或一些伪代码或其他帮助我更好地理解您的流程的东西来说明。这就像子线程将执行再次转移到父线程。不能。一个线程不能“调用”另一个线程。一个线程不能将执行“转移”到另一个线程。那些短语没有任何意义。一个线程可以启动另一个线程,一个线程可以等待另一个线程终止。一个线程可以将消息(即对象)放入队列中,另一个线程可以将消息从队列中取出并对其进行处理。等等。是的,我想要类似的机制,但我不想让主线程等待子线程。正如这个答案中所解释的,你要求的是不可能的。在android ui中,线程一直在工作,直到子线程将消息传递给它。所以,这是如何可能的。请给我一些建议。我如何实现这个。不,在Android上,它和Swing上的一样。您提到的“工作”完全包括从事件队列中退出队列,并根据需要对每个退出队列的对象作出反应。