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 ...
随机推荐
- php上传超大文件
1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...
- DAO层,Service层,Controller层、View层协同工作机制
转自 http://www.blogdaren.com/post-2024.html DAO层:DAO层主要是做数据持久层的工 作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计D ...
- Linux下通过shell进MySQL执行SQL或导入脚本
这条命令表示通过用户名和密码执行shell然后在shell里面执行一个建表语句: USER="root" PASS="root" mysql -u $USER ...
- sqlserver如何创建链接服务器
遇到下列问题: 线上服务器A,中转服务器B,本地服务器C 数据在A上面,想在B上面操作类似 select * from [A].[database].table这样的SQL,不用去链接服务器,直接把处 ...
- 前端nginx配置
对nginx还是处于小白阶段,知道的只是简单基础,以下配置没有问题,已实现 文件:nginx-1.15.11\conf\nginx.conf 注释:# 后台接口 :location ^~ /geste ...
- Java中用FileInputStream和FileOutputStream读写txt文件,文件内容乱码的问题,另附循环代码小错误
乱码问题大概就是编码格式不一样,搜了很多都是这么说的,修改编码解决乱码问题链接: https://blog.csdn.net/weixin_42496466/article/details/81189 ...
- 【数据库开发】在Windows上和Linux上配置MySQL的过程
[数据库开发]在Windows上和Linux上配置MySQL的过程 标签(空格分隔): [编程开发] 首先是在Windows上尝试用QT进行MySQL数据库开发,结果总出现driver不能load的错 ...
- 各种 Java Thread State 分析
转自:https://www.cnblogs.com/zhengyun_ustc/archive/2013/03/18/tda.html 1,线程状态为“waiting for monitor ent ...
- VUE-CLI项目同一局域网手机通过IP访问电脑本地项目
0.找到config文件夹下的index.js文件,修改host内容为hots:'0.0.0.0',此时重新运行项目,则其他设备可以通过ip进行访问 1.首先确保电脑防火墙或者杀毒软件关闭,因为大多数 ...
- pthread_mutexattr_t设置的相关函数及其说明
基本概述 该函数用于C函数的多线程编程中,互斥锁的初始化. 头文件:#include <pthread.h> 函数原型: int pthread_mutex_init(pthread_mu ...