线程里面函数的返回值怎么获得
时间: 2024-09-14 13:07:28 浏览: 13
在线程中获取函数的返回值需要通过线程同步机制来完成,因为通常主线程不会直接等待子线程执行完毕并获取其结果。这里有几个常见的做法:
1. 使用 Future 和 Callable:在 Java 中,你可以将 Runnable 或者Callable 类型的任务封装到 Thread 的目标对象,然后创建一个 Future 对象。Future 提供了 get() 方法,可以阻塞直到任务完成并且获取返回值。
```java
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new Callable<String>() {
@Override
public String call() {
// 子线程的函数执行代码
return "result";
}
});
try {
String result = future.get(); // 这里会阻塞直到获取到结果
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
executor.shutdown();
```
2. 自定义同步容器:如果你的线程任务相对简单,也可以考虑自定义一些类来存储结果,并提供一种同步机制(如 synchronized 关键字、Lock 接口等)来读取这个结果。
```java
public class TaskWithResult {
private Object result;
// ...其他构造方法和方法
// 线程任务完成之后设置结果
public void setResult(Object result) {
synchronized (this) {
this.result = result;
notifyAll(); // 醒醒主线程
}
}
// 主线程调用此方法来获取结果
public Object getResult() throws InterruptedException {
synchronized (this) {
while (result == null) {
wait(); // 等待结果可用
}
return result;
}
}
}
// 使用示例
TaskWithResult task = new TaskWithResult();
new Thread(() -> { task.setResult("thread result"); }).start();
Object result = task.getResult();
```