进阶day06-可以获取子线程结果的Callable接口

This commit is contained in:
2026-03-07 13:42:15 +08:00
parent f6e807667a
commit c70570200c
2 changed files with 56 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
package com.inmind.callable02;
import java.util.concurrent.Callable;
public class CallableImpl implements Callable<Integer> {
@Override
public Integer call() throws Exception {
//线程要执行的任务
Thread thread = Thread.currentThread();
System.out.println(thread.getName()+"线程在执行call方法");
return 100;
}
}

View File

@@ -0,0 +1,43 @@
package com.inmind.callable02;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/*
我们主线程是否可以获取子线程运行结束后的执行结果???
使用继承Thread和实现Runnable都不行要使用Callable,配合FutureTask类来启动线程
FutureTask 是Runnable的实现类FutureTask构造方法接收Callable对象
通过FutureTask作为参数传给Thread就可以将Callable接口实现类作为Thread的目标任务去执行
获取子线程的结果的使用步骤:
1.定义Callable的实现类
2.创建FutureTask类对象并以Callable的实现类作为参数
3.创建线程对象并以FutureTask类作为参数
4.启动线程在FutureTask对象中通过get方法获取子线程的结果
*/
public class Demo01 {
public static void main(String[] args) {
//创建Callable的实现类
CallableImpl callable = new CallableImpl();
//创建FutureTask类对象
FutureTask<Integer> futureTask = new FutureTask<>(callable);
//创建线程对象并以FutureTask类作为参数
Thread thread = new Thread(futureTask,"子线程123");
thread.start();
//在FutureTask对象中通过get方法获取子线程的结果
Integer result = null;
try {
//阻塞方法,它会等着子线程执行结束,返回了结果之后才继续运行
result = futureTask.get();
} catch (Exception e) {
throw new RuntimeException(e);
}
System.out.println(result);//100
System.out.println("程序结束");
}
}