callable java,JAVA 笔记 Callable 与 FutureTask:有返回值的多线程

常用的Thread类在run方法执行完之后是没有返回值的,要实现子线程完成任务后返回值给主线程需要借助第三方转存。Callable接口则提供了一种有返回值的多线程实现方法。下面以一个简单的地主、监工和长工的例子展示这种接口的用法。

长工类:

长工类实现了Callable接口,线程运行完成后返回一个Integer值。

copycode.gif

import java.util.concurrent.Callable;

public class Changgong implements Callable{

private int hours=12;

private int amount;

@Override

public Integer call() throws Exception {

while(hours>0){

System.out.println("I'm working......");

amount ++;

hours--;

Thread.sleep(1000);

}

return amount;

}

}

copycode.gif

地主:主进程

监工:FutureTask

copycode.gif

import java.util.concurrent.ExecutionException;

import java.util.concurrent.FutureTask;

public class Dizhu {

public static void main(String args[]){

Changgong worker = new Changgong();

FutureTask jiangong = new FutureTask(worker);

new Thread(jiangong).start();

while(!jiangong.isDone()){

try {

System.out.println("看长工做完了没...");

Thread.sleep(1000);

} catch (InterruptedException e) {

//TODO Auto-generated catch block                e.printStackTrace();

}

}

int amount;

try {

amount = jiangong.get();

System.out.println("工作做完了,上交了"+amount);

} catch (InterruptedException e) {

//TODO Auto-generated catch block            e.printStackTrace();

} catch (ExecutionException e) {

//TODO Auto-generated catch block            e.printStackTrace();

}

}

}

copycode.gif

运行结果:

copycode.gif

看工人做完了没...

I'm working......

看工人做完了没...

I'm working......

看工人做完了没...

I'm working......

看工人做完了没...

I'm working......

看工人做完了没...

I'm working......

看工人做完了没...

I'm working......

看工人做完了没...

I'm working......

看工人做完了没...

I'm working......

看工人做完了没...

I'm working......

看工人做完了没...

I'm working......

看工人做完了没...

I'm working......

看工人做完了没...

I'm working......

看工人做完了没...

工作做完了,上交了12

copycode.gif

从上面的例子可以看出,FutureTask 扮演了一个监工的角色,地主(主进程)通过不断地询问监工(isDone()方法)可以得知长工的工作是否完成,并且在长工完成工作后让监工收取成果(get()方法)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值