在另一个线程中同步运行一个函数

时间:2014-03-10 12:58:56

标签: java android

如何在另一个线程中同步运行一个函数,这意味着主UI线程有一个函数调用另一个在另一个线程上工作的函数,等待新线程完成并返回值:

int mainFunction() //this function is on the main UI thread
{
   return doWorkOnNewThread();
}

int doWorkOnNewThread()
{
   //do work on new thread
}

4 个答案:

答案 0 :(得分:2)

您可以使用Async任务,即使它是异步的。您可以使用回调onPostExecute和onProgressUpdate根据需要更新值。我还应该注意到你可能不希望这样做同步,因为它会阻止你的UI线程,这可能会导致应用程序没有响应警报,具体取决于计算所需的时间。

答案 1 :(得分:0)

在单独的线程中执行代码的方法很少。 您可以阅读有关此here

的信息

我认为AsyncTask会做你想做的事。

protected void onPreExecute () {
    // you can show some ProgressDialog indicating to the user that thread is working
}

protected Type doInBackground(String... args) {
    doWorkOnNewThread()
    // do your stuff here
}

protected void onPostExecute(Type result) {
    // here you can notify your activity that thread finished his job and dismiss ProgressDialog
}

答案 2 :(得分:0)

你有两种方式: 1.Asyntask 2.处理程序

答案 3 :(得分:0)

  public static <T> T runSynchronouslyOnBackgroundThread(final Callable<T> callable) {
    T result = new Thread() {
      T callResult;

      @Override
      public void run() {
        try {
          callResult = callable.call();
        } catch (Exception e) {
          throw new RuntimeException(e);
        }
      }

      T startJoinForResult() {
        start();
        try {
          join();
        } catch (InterruptedException e) {
          throw new RuntimeException(e);
        }
        return callResult;
      }
    }.startJoinForResult();

    return result;
  }