import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
*
* @author Kaiwii Ho
* Callable类就是一个有返回值的任务
* 对于任务与Thread之间的关系,可以这样子理解:
* Callable类的实例就是一个锦囊妙计;而Thread就是执行这个锦囊妙计的过程
*
* FutureTask类(Future接口的一个实现)就是一个监视器:检测着被若干个异步线程操作的变量的一个类
*
* 代码演示了主线程如何通过使用Callable类和FutureTask类,实现:
* 主线程一边等待子线程的处理结果,一边完成自己的工作。
*
*考虑以下一个小黑工kaiwii的故事……
*/
public class TestFutureTask {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//准备一份工作给一个打工仔employee叫Kaiwii
Employee kaiwii=new Employee("kaiwii");
//新建一个监工头inspector
FutureTask<Double>inspector=new FutureTask<Double>(kaiwii);
//让kaiwii这个打工仔工作
System.out.println("老板发话,让kaiwii这个打工仔工作吧!");
new Thread(inspector).start();
System.out.println("老板开始数钱!");
//老板一边数钱,一边命令监工inspector监视Kaiwii工作;一旦kaiwii完成工作就拿来让他检查
while(!inspector.isDone()){
System.out.println("老板数钱中……");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//老板交监工inspector将kaiwii的结果呈上来以便他验收kaiwii计算出来的结果
try {
System.out.println("老板发现kaiwii的结果是:"+inspector.get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//子线程
class Employee implements Callable<Double>{
String employee_name;
private void setEmployee_name(String employee_name) {
this.employee_name = employee_name;
}
public Employee(String employee_name) {
setEmployee_name(employee_name);
}
@Override
public Double call() throws Exception {
// TODO Auto-generated method stub
System.out.println("工人"+employee_name+"说:我开始工作了!!!!");
for(int i=1;i<=10;i++){
System.out.println("工人"+employee_name+" 第"+i+"次说:我在工作呢!!!!");
Thread.sleep(1000);
}
System.out.println("工人"+employee_name+"说:我搞好了!!!!");
return Math.random();
}
}
分享到:
相关推荐
基于Java+netty内置时间轮工具处理大批量定时或超时任务工具源码.zip
vCenter中任务、事件清除 适用于:vCenter 6.x,数据库为内置数据库非第三方数据库; 用法:压缩包文件解压到C盘根目录,运行批处理即可,
定义全局线程池,将用户的请求放入自定义队列中,排队等候线程调用,等待超时则自动取消该任务,实现超时可取消的异步任务
任务超时处理是比较常见的需求,Java中对超时任务的处理有两种方式,在文中给大家详细介绍,本文重点给大家介绍Java实现任务超时处理方法,需要的朋友可以参考下
一直用线程池,但有些时候发现线程池无法控制结束某个超时等待的线程任务,所以就勉为其难的自己写了个线程管理~。作用:模仿线程池操作,管理多线程任务,超时,以及完成任务的回调。如果有bug自行处理,服务器挂机...
创建和管理重复任务入门[sudo] npm install timeouter --save例子//Start a basic repeating logvar func = timeouter . add ( {func : function ( ) {console . log ( "Repeating event" )} ,timeout : 1000} )//...
Android 使用AsyncTask设置请求超时的注意事项 final AsyncTaskTools task = new AsyncTaskTools(dialog, doTask, result, context); mTask.execute(蓝牙读卡); new Thread() { public void run() { try { /** ...
Future接口提供方法来检测任务是否被执行完,等待任务执行完获得结果,也可以设置任务执行的超时时间。这个设置超时的方法就是实现Java程 序执行超时的关键。 Future接口是一个泛型接口,严格的格式应该是Future...
不用担心task-running-overtime,因为task框架已经实现了对超时任务的监控,一旦任务超时,任务监控器会将其从线程池中移除,还能帮你自动结束超时任务。 3.任务调度框架性能优良,如果任务队列为空,框架会自动...
单个任务处理的时间比较短 2.将需处理的任务的数量大 使用线程池的好处: 1.减少在创建和销毁线程上所花的时间以及系统资源的开销 2.如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换...
主要介绍了PHP进行批量任务处理不超时的解决方法,结合实例形式简单分析了php结合ajax进行异步处理实现批量任务不超时的相关技巧,需要的朋友可以参考下
.net C#线程超时的解决方案,使用的时候在被调线程入口调用一下这个方法就可以。更多详细代码见附件 Report.RegisterThread(Report.GetCurrentWin32ThreadID(),Thread.CurrentThread); #region 获取当取线程的...
定时任务SpringTask -超时15分钟取消订单
.net C#线程超时的解决方案,使用的时候在被调线程入口调用一下这个方法就可以。更多详细代码见附件 Report.RegisterThread(Report.GetCurrentWin32ThreadID(),Thread.CurrentThread); #region 获取当取线程的...
任务执行超时, 强制结束 任务依赖配置, A任务完成后再执行B任务 账户权限控制 任务类型 shell任务 在任务节点上执行shell命令, 支持任务同时在多个节点上运行 HTTP任务 访问指定的URL地址, 由调度器直接执行, 不...
任务执行超时, 强制结束 任务依赖配置, A任务完成后再执行B任务 账户权限控制 任务类型 shell任务 在任务节点上执行shell命令, 支持任务同时在多个节点上运行 HTTP任务 访问指定的URL地址, 由调度器直接执行, 不...
5.雇主发布任务会有时间限制,超时不审核就会自动审核通过,佣金进入用户帐号中, 6.任务可置顶,可以付费置顶,按天算, 7.雇主可以自己审核任务,可以留言用户是否完成, 8.用户提现后会扣除一定数额的费用,给...
5.雇主发布任务会有时间限制,超时不审核就会自动审核通过,佣金进入用户帐号中, 6.任务可置顶,可以付费置顶,按天算, 7.雇主可以自己审核任务,可以留言用户是否完成, 8.用户提现后会扣除一定数额的费用,给...
Quartz.net作业调度自定义定时执行任务多任务执行c#,定时执行任务,如超时取消订单,自动确认收货等等