使用Callable和Future创建线程
2023-02-18 16:45:17 时间
前言
从Java 5开始,Java提供了Callable接口,该接口是Runnable接口的增强版,Callable接口提供了一个call()方法,可以看作是线程的执行体,但call()方法比run()方法更强大, call()方法可以有返回值,call()方法可以声明抛出异常。使用代码
public class ThreadCallable implements Callable<Integer> {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ThreadCallable threadCallable = new ThreadCallable();
FutureTask<Integer> integerFutureTask = new FutureTask<>(threadCallable);
new Thread(integerFutureTask).start();
Integer result = integerFutureTask.get();
System.out.println(result);
}
@Override
public Integer call() throws Exception {
System.out.println(Thread.currentThread().getName() + ",执行计算操作");
Thread.sleep(3000);
return 1;
}
}
总结
Callable和Future 线程可以获取到返回结果,底层基于LockSupport,在执行integerFutureTask.get()方法时,使用LockSupport,先阻塞主线程,子线程执行完毕之后再唤醒主线程。相关文章
- [PHP] include语句的注意事项
- [TCP] tcp连接SYN超时重传次数和超时时间
- [PHP] 编译安装swoole
- [PHP] swoole直接使用二进制包
- [PHP] php使用event扩展的io复用测试
- [PHP]正则表达式\w和\W区别
- [MySQL] 使用force index强制使用索引
- [HTTP]解决406 not acceptable 错误
- [PHP] 接口增加recaptcha行为验证
- [PHP] Workerman中的注册树模式
- [日常] 解决mysql localhost可以连接但是127.0.0.1不能连接
- [日常] ubuntu下安装php pdo扩展和导入数据库
- [Nginx] nginx配置域名反代后端端口
- [PHP] 使用适配器模式处理数据库对象
- [PHP]使用策略模式消除if else
- [日常] win10开启和安装ubuntu子系统
- [PHP] 解释FastCGI与PHP-FPM的关系
- [PHP] stream_set_blocking非阻塞模式影响fgets fread函数
- [日常] 解决PHP Warning: Module 'mysqli' already loaded in Unknown on line 0
- [PHP]PHP请求在PHP-FPM下的生命周期