5.创建执行线程的方式之三 :实现Callable 接口
Callable 接口
一、Java 5.0 在 java.util.concurrent 提供了 一个新的创建执行线程的方式(之前有继承Thread 和 实现Runnable):Callable 接口
Callable 接口类似于 Runnable ,两者都是为那些其 实例 可能被另外一个线程执行的类设计的。但是 Runnable 接口的 run方法,不会有返回值,并且无法抛出结果检查的异常
二、执行 Callable 方式 ,需要FutureTask 实现类的支持,用于接收运算结果(call方法的返回值),FutureTask 是 Future 接口的实现类
FutureTask.get() 获取结果的前提是, 线程进行了运算,即执行了 call 方法,所以FutureTask也可以用作闭锁
/*
*一、创建执行线程的方式之三 :实现Callable 接口
* 相较于实现 Runnable 接口的方式,方法可以有返回值,并且可以抛出异常
* 二、执行 Callable 方式 ,需要FutureTask 实现类的支持,用于接收运算结果(call的返回值)
* FutureTask 是 Future 接口的实现类
* */
public class TestCallable {
public static void main(String[] args) {
CallableThread ct = new CallableThread();
//1.执行 Callable 方式 ,需要FutureTask 实现类的支持,用于接收运算结果(call的返回值)
FutureTask<Integer> result = new FutureTask<Integer>(ct); new Thread(result).start(); //2.接收线程运算后的结果,
//result.get() 获取结果的前提是, 线程进行了运算,即执行了 call 方法,
//否则result.get(); 是会阻塞的 ,无法结束; 这也很好理解,一定要返回结果,才能接收嘛!
try {
Integer sum = result.get(); //所以 FutureTask 也可用于 闭锁 (等某个线程计算完成后,才能继续执行这个操作)
System.out.println(sum);
} catch (Exception e) {
e.printStackTrace();
} }
} class CallableThread implements Callable<Integer> { //在实现接口指定的泛型即为返回值类型 //实现接口时指定的 类型,就是 call 方法的返回值类型
@Override
public Integer call() throws Exception {
int sum = 0;
for(int i = 0;i < 10;i++) {
System.out.println(i);
sum = sum + i;
}
return sum;
} }
/*
class CallableThread implements Runnable {
@Override
public void run() {
}
}*/
5.创建执行线程的方式之三 :实现Callable 接口的更多相关文章
- 51、多线程创建的三种方式之实现Callable接口
实现Callable接口创建线程 Callable接口是在jdk5版本中加入的,这个接口在java.util.concurrent包下面,与其他两种方式不同的地方在于使用Callable接口创建的线程 ...
- 创建执行线程方式三:实现Callable接口
Callable接口 ① Java 5.0 在 java.util.concurrent 提供了一个新的创建执行 线程的方式:Callable 接口② Callable 接口类似于 Runnable, ...
- 8种创建Java线程的方式,你知道几个?
作者:唐彤 简介 创建线程,是多线程编程中最基本的操作,彤哥总结了一下,大概有8种创建线程的方式,你知道吗? 1.继承Thread类并重写run()方法 public class CreatingTh ...
- 实现多线程的方式之实现Callable接口
package com.hls.juc; import java.util.concurrent.Callable;import java.util.concurrent.ExecutionExcep ...
- 线程池的应用及Callable接口的使用
public interface Executor { /** * Executes the given command at some time in the future. The comman ...
- 创建多线程的第二种方法实现Callable接口
1.实现Callable接口,重写call方法,有返回值 2.通过实现Callable接口创建的线程只能在线程池中使用. 3.返回值就是run方法返回的对象 4.通过future.get()可以获取到 ...
- 50、多线程创建的三种方式之实现Runnable接口
实现Runnable接口创建线程 使用Runnable创建线程步骤: package com.sutaoyu.Thread; //1.自定义一个类实现java.lang包下的Runnable接口 cl ...
- java多线程 -- 创建线程的第三者方式 实现Callable接口
Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个 ...
- 实现Callable接口创建线程
创建执行线程有四种方式: 实现implements接口创建线程 继承Thread类创建线程 实现Callable接口,通过FutureTask包装器来创建线程 使用线程池创建线程 下面介绍通过实现Ca ...
随机推荐
- 共享文件word / excel /ppt 被用戶自己锁定无法编辑-解決方法
共享文件word / excel /ppt 被用戶自己鎖定無法編輯,但用戶嘗試過關閉所有文件和重啓過系統,依然無法編輯. 搜到解決方法: Just in case someone looking fo ...
- 关于一些初学Unity的基本操作和自己的理解
1.Scene面板操作: A.按住鼠标右键,拖动鼠标,可以旋转 B.鼠标滚轮前后滑动,前进后退 C.按下鼠标滚轮,拖动鼠标,可以拖动场景 D.在场景中选中物体,按F键或者在Hierarchy面 ...
- nginx.conf文件配置明细详解
#etnx运行的用户和用户组 user nginx nginx; #工作进程数,建议设置为CPU的总核数 worker_processes ; #全局错误日志定义类型,日志等级从低到高依次为: #de ...
- vue警告: component lists rendered with v-for should have explicit keys
warning信息:component lists rendered with v-for should have explicit keys. See https://vuejs.org/guide ...
- Redis ZSet 有序集合
有序集合类型与集合类型的区别就是他是有序的.有序集合是在集合的基础上为每一个元素关联一个分数,这就让有序集合不仅支持插入,删除,判断元素是否存在等操作外,还支持获取分数最高/最低的前N个元素.有序集合 ...
- linux环境启动rocketmq服务 报connect to <10.4.86.6:10909> failed异常
解决方式: 需要给Producer和Consumer的DefaultMQPushConsumer对象set这个参数,生产者和消费者都需要,否则不能正常消费消息: 这个问题解决后可能还会出现: conn ...
- v-radio
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- hadoop WordCount例子详解。
[学习笔记] 下载hadoop-2.7.4-src.tar.gz,拷贝hadoop-2.7.4-src.tar.gz中hadoop-mapreduce-project\hadoop-mapreduce ...
- 剑指offer36:两个链表的第一个公共结点
1 题目描述 输入两个链表,找出它们的第一个公共结点. 2 思路和方法 方法一: 用两个指针同时从两个链表的表头开始走,当走到自己的链表结尾的时候开始从另一个链表的表头开始向后走.终止条件就是两个指针 ...
- 前端通过js获取手机型号
###前段通过js获取手机型号 需求: 用户登录后记录当前的手机型号并记录 插件: mobile-detect.js插件地址 mobile-device-js插件地址 使用步骤: 获取UA信息-> ...