等待线程完成后再继续

Rau*_*nak 10 java multithreading android

当用户启动我的Android应用程序时,我会启动2个线程在后台进行一些处理.thread_1在客户端上进行一些计算,而thread_2从服务器获取一些数据.一切正常.没有线程修改UI.我有两个跟进问题.

new Thread(new Runnable(){
    @Override
    public void run(){
        MyClass.someStaticVariable = doSomeCalculations();
    }
}).start();
Run Code Online (Sandbox Code Playgroud)
  1. 从线程的run()方法检索数据的最佳实践是什么?我目前有一个静态变量,我将相关计算数据/获取数据分配给它.或者是否建议使用Handler类从线程中获取数据?我想如果他们想要更新UI,只使用处理程序.

    while(true)
    {
        if (!thread1.isAlive() && !thread2.isAlive())  
        {
            startActivity(intent)
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我需要等到两个线程都完成后再通过Intent从两个线程传递数据.我怎样才能做到这一点?我可以使用上面显示的代码来完成它,但这似乎是错误的.

Jos*_*hua 12

你可以使用未来.在数据可用之前,它将阻止get:http://developer.android.com/reference/java/util/concurrent/Future.html

另一种方法是将CountDownLatch传递给线程,并在退出run方法时调用countDown():http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html

final CountDownLatch latch = new CountDownLatch(2);
new Thread(new Runnable(){
  @Override
  public void run(){
    // Do something
    latch.countDown()
  }
}).start();
new Thread(new Runnable(){
  @Override
  public void run(){
    // Do something
    latch.countDown()
  }
}).start();

latch.await()
startActivity(intent)
Run Code Online (Sandbox Code Playgroud)