java,
分享于 点击 31408 次 点评:32
java,
FutureTask可以用做闭锁(FutureTask实现了Future语义),FutureTask表示的计算是通过Callable来实现的,同时实现了Runnable接口.FutureTask在Executor(线程池)框架中使用异步任务.可以用于一些时间较长的计算,这些计算在[b]使用结果[/b]之前启动.下面的demo就是 已得到[b]其它账户[/b](ortherTaltal)金额,再通过需要[b]计算很久[/b](privateAccount)(5s)才能得到的金额.
package com.rainbow.mc.queue.FutureTask;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* Created by xiaojc on 2015/9/9.
*/
public class FutureTaskTest {
public static void main(String[] args) throws InterruptedException {
Callable<PrivateAccount> privateAccountCallable = new PrivateAccount();
FutureTask futureTask = new FutureTask(privateAccountCallable);
Long startTime = System.currentTimeMillis();
System.out.println("线程开始时间是:"+startTime);
Thread thread = new Thread(futureTask);
thread.start();
System.out.println("主线程开始执行其他任务");
int ortherTaltal = new Random().nextInt(1000);
System.out.println("其它账户有人民币:"+ortherTaltal+"元");
//轮循 FutrueTask 任务结果是否完成.
while (!futureTask.isDone()){
Thread.sleep(500);//休眠500毫秒(不休眠会一直打印下面的语句)
System.out.println("私有账户计算未完成继续等待...");
}
Long endTime = System.currentTimeMillis();
System.out.println("futureTask线程计算完毕,此时时间为" + endTime +"一共花费时间:"+(endTime-startTime)+"ms");
try {
Integer privateAccount = (Integer) futureTask.get();
System.out.println("您现在的总金额为:" + ortherTaltal + privateAccount.intValue());
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
package com.rainbow.mc.queue.FutureTask;
import java.util.Random;
import java.util.concurrent.Callable;
/**
* Created by xiaojc on 2015/9/9.
*/
public class PrivateAccount implements Callable{
@Override
public Object call() throws Exception {
//模拟计算时长(当前线程休眠5秒)
Thread.sleep(5000);
Integer privateAccount = new Integer(new Random().nextInt(10000));
System.out.println("当前您账户共有人民币:"+privateAccount+"元");
return privateAccount;
}
}
线程开始时间是:1441812546793
主线程开始执行其他任务
其它账户有人民币:431元
私有账户计算未完成继续等待...
私有账户计算未完成继续等待...
私有账户计算未完成继续等待...
私有账户计算未完成继续等待...
私有账户计算未完成继续等待...
私有账户计算未完成继续等待...
私有账户计算未完成继续等待...
私有账户计算未完成继续等待...
私有账户计算未完成继续等待...
当前您账户共有人民币:2241元
私有账户计算未完成继续等待...
futureTask线程计算完毕,此时时间为1441812551798一共花费时间:5005ms
您现在的总金额为:2672
相关文章
- 暂无相关文章
用户点评