0

假设一个泛型方法,即sayHello(a),将参数str作为形式参数。

new Thread(new Runnable() {

    @Override
    public void run() {
        String str = "Hello World";
        sayHello(str);
    }           
}).start();

我需要sayHello(str)在这个线程之外执行(或更重要的是,在主线程内部),但是String str = "Hello World";必须在这个新线程中执行。那么,我将如何解决这个问题呢?

4

4 回答 4

0

在主线程中声明str并在新线程中分配值,然后您可以调用sayHello方法。

于 2013-03-21T04:49:15.497 回答
0
new Thread(new Runnable() {

  @Override
  public void run() {
      final String str = "Hello World";

      runOnUiThread(new Runnable()
      {
          public void run()
          {
              sayHello(str);
          }
      });
  }

}).start();
于 2013-03-21T04:53:36.107 回答
0

使用java.util.concurrent.FutureTask.

来自 JDK 6 api 文档。

 interface ArchiveSearcher { String search(String target); }
 class App {
   ExecutorService executor = ...
   ArchiveSearcher searcher = ...
   void showSearch(final String target) throws InterruptedException {
     Future<String> future = executor.submit(new Callable<String>() {
         public String call() { return searcher.search(target); }
     });
     displayOtherThings(); // do other things while searching
     try {
       displayText(future.get()); // use future
     } catch (ExecutionException ex) { cleanup(); return; }
   }
 }
于 2013-03-21T04:54:54.333 回答
0

检查这个类似问题的答案“如何等待 Android runOnUiThread 完成? ”。它包含一个 BlockingOnUIRunnable 类的实现,应该可以解决您的问题。它还将同步运行您的 sayHello() 函数。

于 2013-03-21T05:30:01.323 回答