创建线程之三:实现Callable接口
通过Callable和Future创建线程
i. 创建Callable接口的实现类,并实现call方法,该call方法将作为线程执行体,并且有返回值,可以抛出异常。
ii. 创建Callable实现类的实例,使用FutureTask类包装Callable对象,该FuturedTask对象封装了Callable对象的call方法的返回值。
iii. 使用FutureTask对象作为Thread对象的target,创建并启动新线程。
iv. 调用FutureTask对象的get方法来获得子线程执行结束后的返回值。
 public class TestCallable {
     public static void main(String[] args) {
         ThreadDemo td = new ThreadDemo();
         //1.执行 Callable 方式,需要 FutureTask 实现类的支持,用于接收运算结果。
         FutureTask<Integer> result = new FutureTask<>(td);
         new Thread(result).start();
         //2.接收线程运算后的结果
         try {
             Integer sum = result.get();  //FutureTask 可用于闭锁
             System.out.println(sum);
             System.out.println("------------------------------------");
         } catch (InterruptedException | ExecutionException e) {
             e.printStackTrace();
         }
     }
 }
 class ThreadDemo implements Callable<Integer>{
     public Integer call() throws Exception {
         int sum = 0;
         for (int i = 0; i <= 100000; i++) {
             sum += i;
         }
         return sum;
     }
 }
//创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(taskSize);
// 创建多个有返回值的任务
List<Future> list = new ArrayList<Future>();
for (int i = 0; i < taskSize; i++) {
Callable c = new MyCallable(i + " ");
// 执行任务并获取 Future 对象
Future f = pool.submit(c);
list.add(f);
}
// 关闭线程池
pool.shutdown();
// 获取所有并发任务的运行结果
for (Future f : list) {
// 从 Future 对象上获取任务的返回值,并输出到控制台
System.out.println("res:" + f.get().toString());
}
创建线程之三:实现Callable接口的更多相关文章
- 多线程----Thread类,Runnable接口,线程池,Callable接口,线程安全
		
1概念 1.1进程 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 任务管理器中: 1.2线程 线程是进程中的一个执行单元 ...
 - Android(java)学习笔记66:实现Runnable接口创建线程 和 使用Callable和Future创建线程
		
1. 前面说的线程的实现是新写一个子类继承Thread: 是将类声明为 Thread 的子类.该子类应重写 Thread 类的 run 方法.接下来可以分配并启动该子类的实例 2. 这里说的方案2是指 ...
 - Android(java)学习笔记6:实现Runnable接口创建线程 和 使用Callable和Future创建线程
		
1. 前面说的线程的实现是新写一个子类继承Thread: 是将类声明为 Thread 的子类.该子类应重写 Thread 类的 run 方法.接下来可以分配并启动该子类的实例 2. 这里说的方案2是指 ...
 - 线程池与Callable接口
		
定义: 一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源. 使用方法 public void lockDemo() throws Inter ...
 - Java多线程学习总结--线程概述及创建线程的方式(1)
		
在Java开发中,多线程是很常用的,用得好的话,可以提高程序的性能. 首先先来看一下线程和进程的区别: 1,一个应用程序就是一个进程,一个进程中有一个或多个线程.一个进程至少要有一个主线程.线程可以看 ...
 - 创建线程的4种方法 and 线程的生命周期
		
线程的启动和运行 方法一:使用start()方法:用来启动一个线程,当调用start方法后,JVM会开启一个新线程执行用户定义的线程代码逻辑. 方法二:使用run()方法:作为线程代码逻辑的入口方法. ...
 - 使用Callable接口创建线程和使用线程池的方式创建线程
		
1.使用Callable接口的方式实现多线程,这是JDK5.0新增的一种创建多线程的方法 package com.baozi.java2; import java.util.concurrent.Ca ...
 - 使用Runnable接口创建线程-3
		
实现Runnable接口的类必须使用Thread类的实例才能创建线程.通过Runnable接口创建线程分为两步: 1. 将实现Runnable接口的类实例化. 2. 建立一个Thread对象,并将第一 ...
 - 使用Runnable接口创建线程
		
实现Runnable接口的类必须使用Thread类的实例才能创建线程.通过Runnable接口创建线程分为两步: 1.将实现Runnable接口的类实例化. 2.建立一个Thread对象,并将第一步实 ...
 
随机推荐
- Windows下mysql-5.7.28下载、安装、配置教程
			
最近需要更换mysql数据库的版本,写一篇文章,记录一下 一.下载mysql数据库 mysql的下载共有两种,一种是zip压缩文件,另一种是msi安装程序 官方5.7版本zip压缩文件下载页面 官方5 ...
 - Centos系统镜像安装
			
一.下载Centos版本 官网地址:http://isoredirect.centos.org/centos 二.制作U盘启动镜像 1.下载安装win32diskimager,用于制作U盘启动镜像,点 ...
 - 分享几个好看又实用的PPT网站~
			
一,优品PPT[http://www.ypppt.com/] 一个有情怀的免费PPT模板下载网站!拥有非常多很精美的PPT模板,分类齐全,我们可以选择自己喜欢的PPT模板下载套用就可以了. 二,扑奔P ...
 - 当Python遇上AI(一)
			
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.什么是学习 如果要给学习下一个定义,那么根据某百科给出的定义是——学习,是指通过阅读.听讲.思考和实践等途径获 ...
 - Django 执行 makemigrations 显示 No changes detected in app
			
在Django项目配置一下多数据库,但是运行 makemigrations 执行不正常 $ python manage.py makemigrations polls No changes detec ...
 - CODING 祝大家中秋快乐!
 - 十分钟 CODING DevOps 全链路体验
			
近期 CODING 团队在 2019 KubeCon 大会上发布 DevOps 一站式解决方案:CODING 2.0.此次 CODING 全新上线了持续集成与制品库模块,通过自动化与标准化的方式来帮助 ...
 - Dotnetcore或owin程序启用SSL的方法
			
https端口需要绑定SSL证书 操作方法与步骤如下: 在IIS中创建证书 查看证书的指纹 使用命令行绑定端口与证书 上述第三步也可以更换为创建一个新的空网站,绑定https端口为相同端口并绑定证书, ...
 - C#&.Net干货分享- 构造SMSWebChineseApi对接第三方短信平台
			
你们想要的短信对接,要舍得点钱哦.... /// <summary> /// http://sms.webchinese.cn/api.shtml /// </summa ...
 - js对象数组中的某属性值 拼接成字符串
			
js对象数组中的某属性值 拼接成字符串 var objs=[ {id:1,name:'张三'}, {id:2,name:'李四'}, {id:3,name:'王五'}, {id:4,name:'赵六' ...