Callable创建线程
2024-09-06 02:23:12
(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();
} }
}
最新文章
- Bundle包的制作与使用
- Android Studio导入项目遇到的问题
- Thinking in Java——笔记(11)
- ASM:《X86汇编语言-从实模式到保护模式》第11章:进入保护模式
- 有关PowerShell脚本你必须知道的十个基本概念
- Python中的join()函数split()函数
- Linux下编译安装mysql-5.0.45.tar.gz
- Asp.net中用户自定义控件 ascx的使用
- [C入门 - 游戏编程系列] 环境篇
- DataTable中数据针对某列数据去重
- ThreadPool.QueueUserWorkItem的性能问题
- VirtualBox 磁盘容量调整
- 【转】Robust regression(稳健回归)
- ZAB协议
- 手机广告投放(phone advertising)唯一标识
- Zabbix11.3 Zabbix SNMP 常用OID列表
- Springboot整合二 集成 rabbitmq
- 【转载】MyBatis JdbcType 与Oracle、MySql数据类型对应关系详解
- Hibernate之mappedBy与@JoinColumn
- Unity扩展编辑器三