gpt4 book ai didi

java - Thread.join - 主线程不会恢复执行

转载 作者:行者123 更新时间:2023-11-30 09:07:25 25 4
gpt4 key购买 nike

我正面临这个问题。我希望我的主线程仅在其他线程完成执行时才恢复执行。但是即使其他线程已完成执行,我的主线程也不会执行。

我的代码如下:

public class MainActivity extends ActionBarActivity {
private TextView mTextView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.text_test);

TestLocalHost th = new TestLocalHost();
Thread exe = new Thread(th);
exe.start();

try {
exe.join();
}
catch (InterruptedException e){
e.printStackTrace();
}

mTextView.setText("MainThread");
}

private class TestLocalHost implements Runnable {

@Override
public void run() {

final String s = JSONParser.doGet("http://<My system ip>/GetResult.ashx?op=getInfo",null);
runOnUiThread(new Runnable() {
@Override
public void run()
{
mTextView.setText(s);

}
});
}
}
}

我正在使用 exe 线程中的值设置 mTextView 的值。我需要我的主线程在执行后用 "Main thread" 覆盖 mTextView。我对 exe 线程使用了 join() 函数,这将确保主线程将等待直到该线程完成执行。但是一旦这个线程完成执行,我的主线程就不会写入 mTextView。我做错了什么?

最佳答案

这与 runOnUiThread 的工作方式有关。

在android中,主线程有一个LooperLooper 持有一个可运行的队列,一次一个。

当你调用 runOnUiThread 时,Runnable 被加入到循环器中,这意味着它将在循环器运行的当前事物完成后执行,并且队列是空的。

在您的例子中,当您调用 join 时,Looper 正在执行 onCreate。这意味着您的 runOnUiThread 将在之后排队等待。

就顺序而言,这意味着以下调用顺序:

  • onCreate
  • 开始
  • 做得到
  • runOnUiThread(线程结束)
  • setText(在 onCreate 中)(onCreate 结束)
  • setText(在 runOnUiThread 中)

关于java - Thread.join - 主线程不会恢复执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23991746/

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