JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法

A、public static ExecutorService newCachedThreadPool()

B、public static ExecutorService newFixedThreadPool(int nThreads)

C、public static ExecutorService newSingleThreadExecutor()

这些方法的返回值是ExecutorService对象

该对象表示一个线程池,可以执行Runnable对象或者Callable对象代表的线程。

上一次实现的是执行Runnable对象的,这次实现下Callable对象的

注意:Callable:是带泛型的接口。这里指定的泛型其实是call()方法的返回值类型。

例子:多线程同时对不同的数段进行求和

首先创建一个类来继承Callable接口

 public class MyCallable implements Callable<Integer> {

     // 由于这里需要2个数,开始和结束的数值。
// 所以创建对象,并且写构造方法接收数值
private int start;
private int end; public MyCallable(int start, int end) {
this.start = start;
this.end = end;
}
int sum = 0;
public Integer call() throws Exception {
for (int x = start; x <= end; x++) { sum += x;
}
return sum;
} }

再创建测试类:

 public class CallableDemo {

     public static void main(String[] args) throws InterruptedException,
ExecutionException { // 创建线程池对象
ExecutorService pool = Executors.newFixedThreadPool(3); // 调用方法
// Future<?> submit(Runnable task)
// <T> Future<T> submit(Callable<T> task)
// 这里需要使用泛型来接收结果,由于Callable中的泛型就是返回类型,所以是用Future<T>
Future<Integer> f1 = pool.submit(new MyCallable(1, 100));
Future<Integer> f2 = pool.submit(new MyCallable(100, 200));
Future<Integer> f3 = pool.submit(new MyCallable(1, 200)); // 由于Mycallable类返回了计算的结果,所以这里需要一个方法来接收这个结果
// V get(); 这里需要抛异常
Integer n1 = f1.get();
Integer n2 = f2.get();
Integer n3 = f3.get(); System.out.println(n1);
System.out.println(n2);
System.out.println(n3); //关闭线程
pool.shutdown(); }
}

这种方式的好处是:

  A、可以有返回值

  B、可以抛出异常

弊端是:

  A、代码比较复杂,所以一般不用

java 22 - 21 多线程之多线程的代码实现方式3的更多相关文章

  1. java 22 - 10 多线程之两种代码实现方式的比较与区别

  2. Java 10 的 10 个新特性,将彻底改变你写代码的方式!

    Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK ...

  3. Java 10的10个新特性,将彻底改变你写代码的方式!

    Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK ...

  4. java 多线程: Thread 并发访问-代码块同步synchronized {};String作为被锁的对象

    方法同步的弊端 方法同步的时候,如果一个方法需要线程安全控制的代码速度其实很快,但是还有其他的业务逻辑代码耗时非常长(比如网络请求),这样所有的线程就在这一块就等待着了,这样造成了极大的资源浪费如果并 ...

  5. java 22 - 12 多线程之解决线程安全问题的实现方式1

    从上一章知道了多线程存在着线程安全问题,那么,如何解决线程安全问题呢? 导致出现问题的原因: A:是否是多线程环境 B:是否有共享数据 C:是否有多条语句操作共享数据 上一章的程序,上面那3条都具备, ...

  6. Java进阶(三)多线程开发关键技术

    原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...

  7. Java入门——(4)多线程

      关键词:线程.Thread.Runnable.sleep().yield().join().同步   一.线程的概述 在一个操作系统中,每个独立执行的程序都可以称为一个进程,也就是"正在 ...

  8. Java基础(七)——多线程

    一.概述 1.介绍 Java VM 启动的时候会有一个进程Java.exe,该进程中至少有一个线程负责Java程序的执行.而且这个线程运行的代码存在于main方法中,该线程称之为主线程.其实从细节上来 ...

  9. Java基础系列3:多线程超详细总结

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 1.线程概述 几乎所 ...

随机推荐

  1. Android二维码识别 开源项目ZXing的编译

    Android二维码识别 开源项目ZXing的编译 Android端的条形码/二维码识别功能 因为手机端的输入不是很方便,所以条形码/二维码的扫描是一种很有效的解决手段. 比较流行的手机应用中,常用的 ...

  2. JDBC连接MySQL 方法 实例及资料收集

    JDBC连接MySQL 方法 实例及资料收集 准备工作 首先,安装MySQL,配置用户名和密码,创建数据库. 可参见之前的文章: http://www.cnblogs.com/mengdd/p/315 ...

  3. IOS开发中常用一下方法

    1.获得屏幕的宽高 [UIScreen mainScreen].bounds.size.width [UIScreen mainScreen].bounds.size.height 2.Iphone版 ...

  4. Java中的查找算法之顺序查找(Sequential Search)

    Java中的查找算法之顺序查找(Sequential Search) 神话丿小王子的博客主页 a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数 ...

  5. mvc4 用NPOI导出Excel

    第一次做数据导出Excel,刚看到这个的时候,首先想到的就是新建一个excel的文件,然后将它下载,后来询问别人,他们都推荐使用NPOI,发现这个很好用,就用博客记录一下 1.引用NPOI包 2.导出 ...

  6. Swift 二维码扫描 简单实现

    3.30看视频  学到了二维码简单的实现 还有一些动画的实现  今天就先记录一下二维码扫描的简单实现  不太好记手写一遍 学习的基础在于模仿嘛 创建一个实现二维码扫描的步骤 1.首先是懒加载创建 会话 ...

  7. yii2 数据导出 excel导出以及导出数据时列超过26列时解决办法

    作者:白狼 出处:http://www.manks.top/article/yii2_excel_extension​ 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...

  8. Tomcat源码解读:ClassLoader的设计

    Tomcat是一个经典的web server,学习tomcat的源码对于我们是有很大的帮助的.前一段时间了解了tomcat的工作的大致流程,对我的新工作有了很大的帮助.刚学习了ClassLoader( ...

  9. T-SQL性能调整(一)--编译和重新编译

    概念简介 我们平时所说的查询在SQLServer 中主要有两部分来实现: 编译查询,主要包括了五个环节(缓存查找.分析.代数化.优化.缓存新计划) 流程描述: 首先,在计划缓存中查找是否包含新的查询, ...

  10. JVM知识点

    先发个链接到两位大牛的主页 http://rednaxelafx.iteye.com/               http://icyfenix.iteye.com/ 目录 1)概述 2)编译 3) ...