Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 - Fatal编程技术网

Java-在主线程上运行一个从工作线程调用的方法

Java-在主线程上运行一个从工作线程调用的方法,java,multithreading,Java,Multithreading,如何在主线程上调用并运行从其工作线程调用的方法 主线程代码,可以从主线程访问Foo函数: Thread newThread = new Thread(myThread, myThread.getThreadName()); newThread.start(); 工作线程代码newThread: @Override public void run(){ // need to call from here Foo() function - it has to run on the main thr

如何在主线程上调用并运行从其工作线程调用的方法

主线程代码,可以从主线程访问Foo函数:

Thread newThread = new Thread(myThread, myThread.getThreadName());
newThread.start();
工作线程代码newThread:

@Override
public void run(){
// need to call from here Foo() function - it has to run on the main thread
}

谢谢

调用另一个线程中的方法在Java中没有任何意义

您需要了解线程和线程是两种不同的东西:线程是通过某些代码执行的路径。线程是一个Java对象,可用于启动新线程并管理其生命周期

当其他线程调用t.start时,新线程开始,其中t表示线程对象。线程开始执行t.run方法,并在函数调用中来回游荡,直到到达t.run的末尾,此时线程死亡。同时,其他线程在代码中遵循自己的路径

在最低级别,一个线程与另一个线程交互的唯一方法是更新共享对象和类的字段

线程A可以通过发送消息(例如,通过更新某个对象中的字段)来告诉线程B执行某个函数或另一个函数,但线程A永远无法让线程B执行某些操作。线程B只能执行它正在执行的代码所说的操作。如果代码说,看字段f,如果它的值大于零,那么调用函数foobar,那么线程B就会这样做。或者,如果代码告诉它从队列中弹出一个Runnable并调用Runnable的run方法,那么线程就会这样做


但是,一旦某个线程开始运行它,任何线程都不能更改其他线程正在运行的代码。它只能更改影响代码下一步操作的字段。

您能举个例子吗?可以。我有一个调用新线程new.thread.start的主线程。我需要执行一个方法,该方法必须在主线程上运行,参数是在工作线程上创建的-因此我需要从工作线程调用主线程仍然不清楚,您可以添加一个最小的代码段吗?这还不够,您必须显示一个完整的示例,否则请享受downvotingMain thread->创建工作线程的乐趣。例如,只有主线程可以调用和运行一个特殊方法-我需要从工作线程->所以-我如何在主线程上运行这个特殊方法,尽管它是从工作线程调用的?谢谢你的帮助!主线程能否侦听从工作线程调用的事件?如果被触发,执行一些代码?示例:主线程启动一个工作线程,然后进入while1循环。工作线程等待一些触发器-例如,如果文件夹的大小大于1MB,那么工作线程需要通知主线程,主线程将执行一些代码,尽管它在while1循环中?我喜欢根据线程等待的内容定义线程,我喜欢看到每个线程只等待一种类型的东西。例如,工作线程位于循环中,等待从阻塞队列中获取任务。当它得到一个时,它执行任务,然后返回等待下一个。GUI事件线程等待鼠标或键盘输入,然后找到适当的处理程序,调用该处理程序,然后返回等待。由您决定主线程将等待什么。来自阻止队列的消息?这很有效。