Callable创建线程
(1)Callable接口更像是Runnable接口的增强版,相比较Runable接口,Call()方法新增捕获和抛出异常的功能;Call()方法可以返回值<br>
(2)Future接口提供了一个实现类FutureTask实现类,FutureTaks类用来保存Call()方法的返回值,并作为Thread类的target。<br>
(3)调用FutureTask的get()方法来获取返回值 import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask; /**
* (1)创建Callable接口的实现类,并重写call()方法,该call()方法作为线程的执行体,且有返回值
* (2)创建了Callable接口的实现类的实例,并用FutureTask()方法包装对象,该FutureTask()对象实现了
* 将对象的返回值包装的功能
* (3)使用FutureTask对象将Thread对象的target,创建并启动线程
* (4)调用FutureTask对象的get()方法获得子线程执行结束后的返回值
* */
public class Callable_Future implements Callable<Integer> { @Override
public Integer call() throws Exception { //重写Callable接口中的call()方法 int i=0;
for(;i<100;i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
return i;
} public static void main(String[] args) throws InterruptedException, ExecutionException {
//创建Callable的对象
Callable_Future ca=new Callable_Future();
FutureTask<Integer> ft=new FutureTask<Integer>(ca);
for(int i=0;i<100;i++) {
//返回值主线程的名称和执行代号
System.out.println(Thread.currentThread().getName()+" "+i);
if(i==20) {
new Thread(ft,"Callable线程").start();
//该方法将导致主线程被阻塞,直到call()方法结束并返回为止
//System.out.println("子线程的返回值"+ft.get());
}
}
try{
System.out.println("子线程的返回值"+ft.get());
}catch (Exception e) {
e.printStackTrace();
} }
}
Callable创建线程的更多相关文章
- java Callable创建线程
package com.java.concurrent; import java.util.concurrent.Callable; import java.util.concurrent.Execu ...
- 7. Callable 创建线程的方式三
package com.gf.demo06; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionEx ...
- 0036 Java学习笔记-多线程-创建线程的三种方式
创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...
- Java多线程学习总结--线程概述及创建线程的方式(1)
在Java开发中,多线程是很常用的,用得好的话,可以提高程序的性能. 首先先来看一下线程和进程的区别: 1,一个应用程序就是一个进程,一个进程中有一个或多个线程.一个进程至少要有一个主线程.线程可以看 ...
- Java并发编程:Java创建线程的三种方式
目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...
- java核心知识点学习----创建线程的第三种方式Callable和Future CompletionService
前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...
- Android(java)学习笔记66:实现Runnable接口创建线程 和 使用Callable和Future创建线程
1. 前面说的线程的实现是新写一个子类继承Thread: 是将类声明为 Thread 的子类.该子类应重写 Thread 类的 run 方法.接下来可以分配并启动该子类的实例 2. 这里说的方案2是指 ...
- 创建线程的第三种方式——使用Callable接口
Callable是类似于Runnable的接口,实现Callable的类和实现Runnable的类都是可被其他线程执行的任务. 优点:有返回值 缺点:实现繁琐 简单实现: CallableAndFut ...
- 使用Callable接口创建线程和使用线程池的方式创建线程
1.使用Callable接口的方式实现多线程,这是JDK5.0新增的一种创建多线程的方法 package com.baozi.java2; import java.util.concurrent.Ca ...
随机推荐
- php面试专题---3、运算符考察点
php面试专题---3.运算符考察点 一.总结 一句话总结: 逻辑运算符注意短路效果,优先级问题直接用括号,还要注意 ||和&&与or和and的优先级不同 1.foo()和@foo() ...
- Hive date_add 和 date_diff 函数
date_add 函数 例子:date_add('day',-1,current_date) date_diff 函数 例子:date_diff('day',cast(a.dt1 as timesta ...
- Python Django 编写一个简易的后台管理工具1-安装环境
安装python环境 MAC 一般都会自带 Python2.x版本 的环境,你也可以在链接 https://www.python.org/downloads/mac-osx/ 上下载最新版安装. 安装 ...
- VS2012修改代码时会把后面的覆盖
vs2012修改代码时会把后面的覆盖,并且鼠标指针变成灰色竖方块 解决:按一下键盘上的Insert键
- void*和void类型
| 版权声明:本文为博主原创文章,未经博主允许不得转载. void的类型是无类型的数据,void*表示无类型的指针.其中void*可以指向任何数据类型的指针. void类型的用法: (1).voi ...
- 重磅!挑战Oracle,华为将开源 GaussDB 数据库
来源:中关村在线,https://dwz.cn/nHNSOTeN 有消息称在正在进行的鲲鹏计算产业论坛上,华为宣布将开源其GaussDB数据库. GaussDB数据库是今年5月15日华为公布的分布式数 ...
- SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势
一.提示(Hint)概述 1为什么引入Hint? Hint是Oracle数据库中很有特色的一个功能,是很多DBA优化中经常采用的一个手段.那为什么Oracle会考虑引入优化器呢?基于代价的优化器是很聪 ...
- C# 与 C++ 互操作(C# 调用 C++ 的动态链接库)
1.新建 C++ 动态链接库项目 CPlus.cpp: #include "stdafx.h" extern "C" __declspec(dllexport) ...
- 【转】 linux下配置squid 服务器,最简单使用方式
linux下配置squid 1.什么是squid Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器.Squid有广泛的用途,从作为网 ...
- java 自适应响应式 网站 源码 SSM 生成 静态化 手机 平板 PC 企业站源码
前台: 支持四套模版, 可以在后台切换 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问 ...