gpt4 book ai didi

java - 从辅助线程在主线程上运行代码?

转载 作者:IT老高 更新时间:2023-10-28 21:17:51 26 4
gpt4 key购买 nike

这是一个一般的 Java 问题,而不是 Android 问题!

我想知道如何从辅助线程的上下文中在主线程上运行代码。例如:

new Thread(new Runnable() {
public void run() {
//work out pi to 1,000 DP (takes a while!)

//print the result on the main thread
}
}).start();

那种事情——我意识到我的例子有点糟糕,因为在 Java 中你不需要在主线程中打印一些东西,而且 Swing 也有一个事件队列——但是一般情况下你在后台线程的上下文中,可能需要在主线程上运行一个 Runnable。

编辑:为了比较 - 这是我在 Objective-C 中的做法:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0UL), ^{
//do background thread stuff

dispatch_async(dispatch_get_main_queue(), ^{
//update UI
});
});

提前致谢!

最佳答案

没有通用的方法可以将一些代码发送到另一个正在运行的线程并说“嘿,你,做这个”。您需要将主线程置于具有接收工作机制并等待工作完成的状态。

这是一个简单的例子,它设置主线程等待从其他线程接收工作并在它到达时运行它。显然你会想要添加一种方法来实际结束程序等等......!

public static final BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();

public static void main(String[] args) throws Exception {
new Thread(new Runnable(){
@Override
public void run() {
final int result;
result = 2+3;
queue.add(new Runnable(){
@Override
public void run() {
System.out.println(result);
}
});
}
}).start();

while(true) {
queue.take().run();
}
}

关于java - 从辅助线程在主线程上运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16268693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com