callable结合FutureTask的多线程使用(免打扰模式)

本文介绍了一个使用Java的Callable和FutureTask实现的并发编程案例。通过一个生动的例子展示了主线程如何在等待子线程处理结果的同时进行其他工作。具体地,通过模拟老板与小工之间的互动,说明了如何创建Callable任务、FutureTask以及如何使用Thread来执行这些任务。
importjava.util.concurrent.Callable;
importjava.util.concurrent.ExecutionException;
importjava.util.concurrent.FutureTask;

/**
*
*@authorKaiwiiHo
*Callable类就是一个有返回值的任务
*对于任务与Thread之间的关系,可以这样子理解:
*Callable类的实例就是一个锦囊妙计;而Thread就是执行这个锦囊妙计的过程
*
*FutureTask类(Future接口的一个实现)就是一个监视器:检测着被若干个异步线程操作的变量的一个类
*
*代码演示了主线程如何通过使用Callable类和FutureTask类,实现:
*主线程一边等待子线程的处理结果,一边完成自己的工作。
*
*考虑以下一个小黑工kaiwii的故事……
*/

publicclassTestFutureTask{



/**
*@paramargs
*/

publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
//准备一份工作给一个打工仔employee叫Kaiwii
Employeekaiwii=newEmployee("kaiwii");
//新建一个监工头inspector
FutureTask<Double>inspector=newFutureTask<Double>(kaiwii);
//让kaiwii这个打工仔工作
System.out.println("老板发话,让kaiwii这个打工仔工作吧!");
newThread(inspector).start();
System.out.println("老板开始数钱!");
//老板一边数钱,一边命令监工inspector监视Kaiwii工作;一旦kaiwii完成工作就拿来让他检查
while(!inspector.isDone()){
System.out.println("老板数钱中……");
try{
Thread.sleep(500);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

}
//老板交监工inspector将kaiwii的结果呈上来以便他验收kaiwii计算出来的结果
try{
System.out.println("老板发现kaiwii的结果是:"+inspector.get());
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(ExecutionExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

}

}

//子线程
classEmployeeimplementsCallable<Double>{
Stringemployee_name;

privatevoidsetEmployee_name(Stringemployee_name){
this.employee_name=employee_name;
}

publicEmployee(Stringemployee_name){
setEmployee_name(employee_name);
}
@Override
publicDoublecall()throwsException{
//TODOAuto-generatedmethodstub
System.out.println("工人"+employee_name+"说:我开始工作了!!!!");
for(inti=1;i<=10;i++){
System.out.println("工人"+employee_name+"第"+i+"次说:我在工作呢!!!!");
Thread.sleep(1000);
}
System.out.println("工人"+employee_name+"说:我搞好了!!!!");
returnMath.random();
}
}

console显示结果:

老板发话,让kaiwii这个打工仔工作吧!
老板开始数钱!
工人kaiwii说:我开始工作了!!!!
工人kaiwii 第1次说:我在工作呢!!!!
老板数钱中……
老板数钱中……
工人kaiwii 第2次说:我在工作呢!!!!
老板数钱中……
老板数钱中……
老板数钱中……
工人kaiwii 第3次说:我在工作呢!!!!
老板数钱中……
老板数钱中……
工人kaiwii 第4次说:我在工作呢!!!!
老板数钱中……
老板数钱中……
工人kaiwii 第5次说:我在工作呢!!!!
老板数钱中……
老板数钱中……
工人kaiwii 第6次说:我在工作呢!!!!
老板数钱中……
老板数钱中……
工人kaiwii 第7次说:我在工作呢!!!!
老板数钱中……
老板数钱中……
工人kaiwii 第8次说:我在工作呢!!!!
老板数钱中……
老板数钱中……
工人kaiwii 第9次说:我在工作呢!!!!
老板数钱中……
老板数钱中……
工人kaiwii 第10次说:我在工作呢!!!!
老板数钱中……
工人kaiwii说:我搞好了!!!!
老板数钱中……
老板发现kaiwii的结果是:0.5295364482450889

内容概要:本文档介绍了基于3D FDTD(时域有限差分)方法在MATLAB平台上对微带线馈电的矩形天线进行仿真分析的技术方案,重点在于模拟超MATLAB基于3D FDTD的微带线馈矩形天线分析[用于模拟超宽带脉冲通过线馈矩形天线的传播,以计算微带结构的回波损耗参数]宽带脉冲信号通过天线结构的传播过程,并计算微带结构的回波损耗参数(S11),以评估天线的匹配性能和辐射特性。该方法通过建立三维电磁场模型,精确求解麦克斯韦方程组,适用于高频电磁仿真,能够有效分析天线在宽频带内的响应特性。文档还提及该资源属于一个涵盖多个科研方向的综合性MATLAB仿真资源包,涉及通信、信号处理、电力系统、机器学习等多个领域。; 适合人群:具备电磁场与微波技术基础知识,熟悉MATLAB编程及数值仿真的高校研究生、科研人员及通信工程领域技术人员。; 使用场景及目标:① 掌握3D FDTD方法在天线仿真中的具体实现流程;② 分析微带天线的回波损耗特性,优化天线设计参数以提升宽带匹配性能;③ 学习复杂电磁问题的数值建模与仿真技巧,拓展在射频与无线通信领域的研究能力。; 阅读建议:建议读者结合电磁理论基础,仔细理解FDTD算法的离散化过程和边界条件设置,运行并调试提供的MATLAB代码,通过调整天线几何尺寸和材料参数观察回波损耗曲线的变化,从而深入掌握仿真原理与工程应用方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值