| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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<Integer> {
- 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<Integer> 包装每个 Callable 对象
- FutureTask<Integer> ft1=new FutureTask<>(sc1);
- FutureTask<Integer> ft2=new FutureTask<>(sc2);
- FutureTask<Integer> 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() 有返回值,各自适合什么场景
- }
- }
|