JavaSE8基础 Callable 多线程求和计算
2017-10-08 20:55
134 查看
礼悟:
公恒学思合行悟,尊师重道存感恩。叶见寻根三返一,江河湖海同一体。
虚怀若谷良心主,愿行无悔给最苦。读书锻炼养身心,诚劝且行且珍惜。
Callable接口实现类:
测试类:
结果:
API手册:
这三个截图中的内容在代码中皆有体现,可以帮助理解代码。
Java优秀,值得学习。
学习资源:itcast和itheima视频库。如果您有公开的资源,可以分享给我的话,用您的资源学习也可以。
博文是观看视频后,融入思考写成的。博文好,是老师讲得好。博文坏,是 给最苦 没认真。
公恒学思合行悟,尊师重道存感恩。叶见寻根三返一,江河湖海同一体。
虚怀若谷良心主,愿行无悔给最苦。读书锻炼养身心,诚劝且行且珍惜。
os :windows7 x64
jdk:jdk-8u131-windows-x64
ide:Eclipse Oxygen Release (4.7.0)
jdk:jdk-8u131-windows-x64
ide:Eclipse Oxygen Release (4.7.0)
Callable接口实现类:
package blog.jizuiku5; import java.util.concurrent.Callable; /** * 实现Callable接口,实现 从startNum到endNum 的求和功能 * * @author jizuiku * @version V17.09.27 */ public class CallableImpl implements Callable<Integer> { // V不写的话,默认是Object // call函数的返回值类型就是V private int startNum; private int endNum; public CallableImpl(int startNum, int endNum) { super(); this.startNum = startNum; this.endNum = endNum; } public int getStartNum() { return startNum; } public void setStartNum(int startNum) { this.startNum = startNum; } public int getEndNum() { return endNum; } public void setEndNum(int endNum) { this.endNum = endNum; } @Override public Integer call() throws Exception { // TODO Auto-generated method stub // sum在这里为int类型更好,装箱拆箱需要消耗资源 int sum = 0; for (int i = startNum; i <= endNum; ++i) { sum += i; } // 只发生一次装箱 return sum; } }
测试类:
package blog.jizuiku5; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** * 测试实现Callable接口的类,接收call()函数的返回值 * * @author jizuiku * @version V17.09.27 */ public class CallableDemo { public static void main(String[] args) { // 创建线程池 ExecutorService pool = Executors.newFixedThreadPool(3); // Future<Integer>接收返回参数 // Future一个抽象的接口 Future<Integer> f0 = pool.submit(new CallableImpl(1, 50)); Future<Integer> f1 = pool.submit(new CallableImpl(51, 80)); Future<Integer> f2 = pool.submit(new CallableImpl(81, 100)); Integer res0 = null; Integer res1 = null; Integer res2 = null; try { // get方法:如有必要,等待计算完成,然后获取其结果 // 挺好的!知道等待与协同 res0 = f0.get(); res1 = f1.get(); res2 = f2.get(); } catch (InterruptedException | ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } // NPE要注意! boolean flag = (res0 != null) && (res1 != null) && (res2 != null); if (flag) { System.out.println(res0 + res1 + res2); } else { System.out.println("出现错误"); } // 结束线程池 pool.shutdown(); } }
结果:
API手册:
这三个截图中的内容在代码中皆有体现,可以帮助理解代码。
Java优秀,值得学习。
学习资源:itcast和itheima视频库。如果您有公开的资源,可以分享给我的话,用您的资源学习也可以。
博文是观看视频后,融入思考写成的。博文好,是老师讲得好。博文坏,是 给最苦 没认真。
相关文章推荐
- JavaSE8基础 纯可变参数的函数 进行多个int类型变量求和
- [Java基础]多线程求和小例子
- JavaSE8基础 多线程synchronized 同步代码块 指定锁对象
- 浅谈.NET下的多线程和并行计算(六)线程池基础下
- JavaSE8基础 多线程synchronized 同步的成员方法用的锁对象是this
- 浅谈.NET下的多线程和并行计算(三)线程同步基础上
- 浅谈.NET下的多线程和并行计算(三)线程同步基础上 (转)
- JavaSE8基础 多线程synchronized 同步静态方法的锁
- JavaSE8基础 多线程 匿名内部类继承Thread实现
- 浅谈.NET下的多线程和并行计算(五)线程池基础上
- 【转】浅谈.NET下的多线程和并行计算(八)Winform中多线程编程基础上
- 浅谈.NET下的多线程和并行计算(五)线程池基础上 (转)
- 浅谈.NET下的多线程和并行计算(十一).NET异步编程模型基础下
- JavaSE8基础 多线程 匿名内部类实现Runnable接口实现
- JavaSE8基础 BigInteger 使用递归函数来计算阶乘
- 浅谈.NET下的多线程和并行计算(六)线程池基础下 (转)
- JavaSE8基础 多线程 通过实现Runnable接口实现
- 浅谈.NET下的多线程和并行计算(八)Winform中多线程编程基础上
- JavaSE8基础 多线程 类继承Thread重写run()实现
- Java_基础—多线程程序实现的3种方式Thread和Runnable和Callable