JAVA 笔记 Callable 与 FutureTask:有返回值的多线程
来源:互联网 发布:贵州大数据股票有哪些 编辑:程序博客网 时间:2024/05/22 02:18
常用的Thread类在run方法执行完之后是没有返回值的,要实现子线程完成任务后返回值给主线程需要借助第三方转存。Callable接口则提供了一种有返回值的多线程实现方法。下面以一个简单的地主、监工和长工的例子展示这种接口的用法。
长工类:
长工类实现了Callable接口,线程运行完成后返回一个Integer值。
import java.util.concurrent.Callable;public class Changgong implements Callable<Integer>{ 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; }}
地主:主进程
监工:FutureTask
import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;public class Dizhu { public static void main(String args[]){ Changgong worker = new Changgong(); FutureTask<Integer> jiangong = new FutureTask<Integer>(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(); } }}
运行结果:
看工人做完了没...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
从上面的例子可以看出,FutureTask 扮演了一个监工的角色,地主(主进程)通过不断地询问监工(isDone()方法)可以得知长工的工作是否完成,并且在长工完成工作后让监工收取成果(get()方法)。
转载自:http://www.cnblogs.com/yjl49/archive/2012/09/26/2704274.html
0 0
- JAVA 笔记 Callable 与 FutureTask:有返回值的多线程
- Callable 与 FutureTask:有返回值的多线程
- 有返回值的多线程的实现:FutureTask+Callable
- Java多线程研究06-带返回值的线程定义接口Callable以及Future,FutureTask的使用
- Java多线程 Callable Future FutureTask
- 【Java多线程】-Callable,Future,FutureTask
- java Callable有返回值的线程
- 使用FutureTask和Callable创建可获取返回值的多线程
- JAVA---多线程之Callable与Future,FutureTask,及其简单应用
- java 多线程 返回值 Callable
- java 多线程 返回值 Callable
- 多线程任务Callable与Future或FutureTask的使用
- 【多线程研究专题三】【FutureTask与Callable的本质】
- Java并发编程:Callable、Future和FutureTask 获取返回值
- 带返回值的线程:Callable、Future和FutureTask
- 多线程编程之Callable 与 FutureTask
- Java多线程之 Callable、Future和FutureTask
- Java多线程之Callable、Future和FutureTask
- php中利用整数通过ascii码转换并遍历26个英文字母
- HLG 1118 火柴棒等式
- Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
- PRML 阅读笔记(三)<1.5>
- Python 实现类似PHP的strip_tags函数功能,并且可以自定义设置保留标签
- JAVA 笔记 Callable 与 FutureTask:有返回值的多线程
- Linux中安装g++编译器 及 svn add .so
- 高频面试题【手写strcopy函数】
- 利用Storyboard实现复杂项目
- 【BZOJ2819】Nim 博弈论+树链剖分
- 多重继承与虚继承
- iOS企业账号发布流程
- 实现键值对存储(二)——以现有键值对存储为模型
- 零基础学软件测试V2.0