Java 如何在依赖参数所在的线程之外执行方法
假设一个通用方法,即,Java 如何在依赖参数所在的线程之外执行方法,java,android,multithreading,Java,Android,Multithreading,假设一个通用方法,即,sayHello(a),将参数str作为形式参数 new Thread(new Runnable() { @Override public void run() { String str = "Hello World"; sayHello(str); } }).start(); 我需要在这个线程之外执行sayHello(str)(或者更重要的是,在主线程内部),但是String str=“He
sayHello(a)
,将参数str
作为形式参数
new Thread(new Runnable() {
@Override
public void run() {
String str = "Hello World";
sayHello(str);
}
}).start();
我需要在这个线程之外执行
sayHello(str)
(或者更重要的是,在主线程内部),但是String str=“Hello World”代码>必须在此新线程中执行。那么,我该如何解决这个问题呢?在主线程中声明str
,并在新线程中赋值,然后您可以调用sayHello
方法。使用java.util.concurrent.FutureTask
new Thread(new Runnable() {
@Override
public void run() {
final String str = "Hello World";
runOnUiThread(new Runnable()
{
public void run()
{
sayHello(str);
}
});
}
}).start();
来自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; }
}
}
接口ArchiveSearcher{字符串搜索(字符串目标);}
类应用程序{
executor服务executor=。。。
ArchiveSearcher搜索器=。。。
void showSearch(最终字符串目标)抛出InterruptedException{
Future=executor.submit(new Callable()){
公共字符串调用(){return search.search(target);}
});
displayOtherThings();//搜索时执行其他操作
试一试{
displayText(future.get());//使用future
}catch(ExecutionException ex){cleanup();return;}
}
}
检查类似问题“”的答案。它包含BlockingUnuiRunnable类的实现,应该可以解决您的问题。它还将同步运行sayHello()函数 为什么要标记android,是否要在UI线程之外的新线程中调用sayHello?抱歉,但为什么它必须是最终的?如果我在主线程中声明str并在新线程中赋值,那么str将变为“”(null),因为sayHello(str)方法在新线程之前执行,在本例中为str=“”1.我不明白你到底想干什么。为什么要在新线程之前打电话给SayHello?