我们在多线程中很多时候会需要获得线程的返回值,但是多线程又不像普通方法一样,可以直接获得返回值,那么我们应该怎么获得返回值呢?
一、使用Future获得Callable的返回值
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class TestFuture {
public static void main(String[] args) throws Exception {
ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
Future<String> submit = newCachedThreadPool.submit(new TaskCallable());
System.out.println("1.主线程开始");
String result = submit.get();
System.out.println("2.result:" + result);
}
}
class TaskCallable implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("3.正在执行任务,需要等待五秒时间,执行任务开始");
Thread.sleep(5000);
System.out.println("4.正在执行任务,需要等待五秒时间,执行任务结束");
return "黄浩轩";
}
}
执行结果如下: