博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Callable接口使用以及计算斐波那契数字的数值总和
阅读量:5154 次
发布时间:2019-06-13

本文共 2514 字,大约阅读时间需要 8 分钟。

一、简单使用

Runnable是执行工作的独立任务,但是它不返回任何值。如果你希望任务完成的时能够返回一个值,那么可以实现一个Callable接口。在Java SE5中引入的Callable是一种具有类型参数的泛型,它的类型参数表示的是从call()方法中返回的值,并且必须用ExecutorService.submit()方法调用它。下面是一个简单的例子(摘自Java编程思想)

class TaskWithResult implements Callable
{ private int id; public TaskWithResult(int id) { this.id = id; } @Override public String call() throws Exception { return "Result of TaskWithResult" + id; }}public class CallableDemo { public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); ArrayList
> results = new ArrayList<>(); for (int i = 0;i<10;i++){ results.add(executorService.submit(new TaskWithResult(i))); } for (Future
f: results){ try { System.out.println(f.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); }finally { executorService.shutdown(); } } }}

执行的结果如下

Result of TaskWithResult0Result of TaskWithResult1Result of TaskWithResult2Result of TaskWithResult3Result of TaskWithResult4Result of TaskWithResult5Result of TaskWithResult6Result of TaskWithResult7Result of TaskWithResult8Result of TaskWithResult9

二、计算斐波那契数字的数值总和
public class FibonacciSumDemo {    public static void main(String[] args) {        ExecutorService exec = Executors.newCachedThreadPool();        ArrayList
> results = new ArrayList
>(); for (int i = 1; i <= 6; i++) results.add(exec.submit(new FibonacciSum(i))); Thread.yield(); exec.shutdown(); for (Future
fi : results) try { System.out.println(fi.get()); } catch (Exception e) { e.printStackTrace(); } }}class FibonacciSum implements Generator
, Callable
{ private int count; private final int n; public FibonacciSum(int n) { this.n = n; } public Integer next() { return fib(count++); } private int fib(int n) { if (n < 2) return 1; return fib(n - 2) + fib(n - 1); } public Integer call() { int sum = 0; for (int i = 0; i < n; i++) sum += next(); return sum; }}

Generator接口定义如下

public interface Generator
{ T next();}

执行结果如下:

12471220

转载于:https://www.cnblogs.com/WangHaiMing/p/7674371.html

你可能感兴趣的文章
模板 - 数学 - 矩阵快速幂
查看>>
优秀的持久层框架Mybatis,连接数据库快人一步
查看>>
线段树 延迟更新
查看>>
CentOS的IP配置专题
查看>>
基于WCF大型分布式系统的架构设计
查看>>
Cisco & H3C 交换机 DHCP 中继
查看>>
人脸识别技术及应用,二次开发了解一下
查看>>
理解CSS中的BFC(块级可视化上下文)[译]
查看>>
身份证号码的合法性校验
查看>>
Python基础--通用序列操作
查看>>
[CERC2017]Intrinsic Interval[scc+线段树优化建图]
查看>>
DevExpress DXperience Universal 11.1.6 下载+源码+编译+汉化流程+升级+替换强名
查看>>
Bat文件注册组件
查看>>
Autoit 3 常用的语句
查看>>
PAT L2-016 愿天下有情人都是失散多年的兄妹
查看>>
抛弃IIS,利用FastCGI让Asp.net与Nginx在一起
查看>>
C. Tanya and Toys_模拟
查看>>
System.nanoTime与System.currentTimeMillis
查看>>
入职互联网行业两个月
查看>>
作IFRAME于iOS您的设备上支持滚动
查看>>