第7章 Callable接口
1.FutureTask充当Runnable接口与Callable的中间对象
package JUC.callable; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; //比较两个接口 //实现Runnable接口 class MyThread1 implements Runnable { @Override public void run() { } } //实现Callable接口 class MyThread2 implements Callable { @Override public Integer call() { System.out.println(Thread.currentThread().getName()+ " come in callable"); return 200; } } public class Demo1 { public static void main(String[] args) throws ExecutionException, InterruptedException { //Runnable接口创建线程 new Thread(new MyThread1(),"AA").start(); //Callable接口,报错 // new Thread(new MyThread2(),"BB").start(); //FutureTask FutureTask<Integer> futureTask1 = new FutureTask<>(new MyThread2()); //lam表达式 FutureTask<Integer> futureTask2 = new FutureTask<>(() -> System.out.println(Thread.currentThread().getName()+ " come in callable"), 1024); //创建一个线程 new Thread(futureTask2, "lucy").start(); new Thread(futureTask1, "mary").start(); // while(!futureTask2.isDone()){ // System.out.println("wait......"); // } //调用FutureTask的get方法 System.out.println(futureTask2.get()); System.out.println(futureTask1.get()); System.out.println(Thread.currentThread().getName()+" come over"); //FutureTask原理 未来任务 /** * 1、老师上课,口渴了,去买水不合适,讲课线程继续。 * 单开启线程找班上班长帮我买水,把水买回来,需要时候直接get * * 2、4个同学,1同学1+2...5, 2同学10+11+12....50,3同学60+61+62,4同学 100+200 * 第2个同学计算量比较大, * FutureTask单开启线程给2同学计算,先汇总1 3 4 ,最后等2同学计算位完成,统一汇总 * * 3、考试,做会做的题目,最后看不会做的题目 * * 汇总一次: * 对于第1个例子:班长先买回来矿泉水,我不想喝,然后班长买了可乐,我还是 * 不想喝,然后班长买了雪碧,我还是不想喝,最后班长买了冰红茶,我喝了。第二天, * 我让班长再去买水,直接买冰红茶即可。 * 对于第2个例子:2同学不需要再计算,直接给出答案即可。 * */ } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器