Scala 异步编程之 Future (二)
来源:互联网 发布:app ui 软件 编辑:程序博客网 时间:2024/06/03 22:12
上篇博客讲了scala中的Future,实际上java 在jdk1.5后增加了callable,也实现了Future,以《Netty In Action》中的代码为例,看一下java中Future的实现:
import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class FutureViaJdkExample { public static void main(String[] args)throws Exception { ExecutorService executor = Executors.newCachedThreadPool(); Runnable task1 = new Runnable() { @Override public void run() { // do some heavy work try { Thread.sleep(1000 * 1); } catch (InterruptedException e) { e.printStackTrace(); } } }; Callable<Integer> task2 = new Callable<Integer>() { @Override public Integer call() throws Exception { // do some heavy work with result try { Thread.sleep(1000 * 2); } catch (InterruptedException e) { e.printStackTrace(); } return 0; } }; Future<?> future1 = executor.submit(task1); Future<Integer> future2 = executor.submit(task2); while(!future1.isDone() || !future2.isDone()) { System.out.println("do something else..."); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("future2 value : "+future2.get()); executor.shutdown(); }}
future1是executor提交了runnable的任务,接口如下:
Future<?> submit(Runnable task);
而future2提交了callable的任务
<T> Future<T> submit(Callable<T> task);
submit实现了重载,对于第二种submit的具体实现如下:
public <T> Future<T> submit(Runnable task, T result)
{
if (task == null) throw new NullPointerException();
RunnableFuture<T> ftask = newTaskFor(task, result);
execute(ftask);
return ftask;
}
但是java的Future只能通过阻塞等待结果,而scala中的Oncomplete,OnSuccess等回调能充分地利用多核。
阅读全文
1 0
- Scala 异步编程之 Future (二)
- Scala 异步编程之 Future
- 二. Scala编程之简介
- C++11 异步编程之std::async和std::future
- Scala 中应用 Future 并发编程
- scala学习之:scala的并发编程(二)
- Java并发编程之异步Future机制的原理和实现
- Java多线程编程-(17)-多线程异步调用之Future模式
- Java多线程编程-(19)-多线程异步调用之Future模式
- Java多线程编程-(19)-多线程异步调用之Future模式
- python异步socket编程之二
- Netty4之Future/Promise异步模型
- Netty4之Future/Promise异步模型 .
- Netty4之Future/Promise异步模型
- Java并发编程二:Callable Future
- scala之actor编程
- Scala 异步编程几个概念的理解
- scala future/promise usage
- [WikiOI] 2.5.2 Fibonacci数列
- [WikiOI] 2.6.1 二叉树最大宽度和高度
- [WikiOI] 2.6.2 递归第一次
- 【51Nod1346】递归
- [WikiOI] 2.6.3 3n+1问题
- Scala 异步编程之 Future (二)
- [WikiOI] 2.6.4 二叉树的序遍历
- [WikiOI] 2.6.5 汉诺塔游戏
- 短信验证
- [LeetCode] 001: 3Sum
- [LeetCode] 002: 3Sum Closest
- [LeetCode] 003: 4Sum
- python yield
- [LeetCode] 004: Add Binary