package homework0808; import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; /** * @author WanJl * @version 1.0 * @title Homework_03 * @description * @create 2026/8/10 */ public class Homework_03 { // ========== ① 实现 Callable 接口,泛型指定返回类型 ========== static class SumCallable implements Callable { private int n; // 求 1~n 的和 public SumCallable(int n) { this.n = n; } @Override public Integer call() throws Exception { // TODO 1: int sum = 0; 计算 1~n 的累加和 int sum = 0; // TODO 2: 打印 Thread.currentThread().getName() + "求和结果:" + sum for (int i = 1; i <=n; i++) { sum+=i; } System.out.println(Thread.currentThread().getName() + "求和结果:" + sum); // TODO 3: return sum; // 返回计算结果(get() 会拿到这个值) return sum; } } public static void main(String[] args) throws Exception { // TODO 4: 创建 3 个 SumCallable 对象(求 1~100 / 1~1000 / 1~10000 的和) SumCallable sc1=new SumCallable(100); SumCallable sc2=new SumCallable(1000); SumCallable sc3=new SumCallable(10000); // TODO 5: 用 FutureTask 包装每个 Callable 对象 FutureTask ft1=new FutureTask<>(sc1); FutureTask ft2=new FutureTask<>(sc2); FutureTask ft3=new FutureTask<>(sc3); // TODO 6: new Thread(futureTask, "线程名") 创建 3 个线程并 start() Thread t1=new Thread(ft1,"线程1"); Thread t2=new Thread(ft2,"线程2"); Thread t3=new Thread(ft3,"线程3"); t1.start(); t2.start(); t3.start(); // TODO 7: 调用 ft.get() 获取每个线程的返回值,打印并在 main 中汇总总结果 System.out.println(ft1.get()); System.out.println(ft2.get()); System.out.println(ft3.get()); // TODO 8: (思考)对比三种实现方式:run() 无返回值 vs call() 有返回值,各自适合什么场景 } }