java多线程之Callable接口
1.Callable VS Runnable
- Callable和Runnbale一样代表着是线程任务,区别在于Callable有返回值并且可以抛出异常。
2.创建并启动有返回值的线程的步骤
- 创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且该call()方法有返回值。
- 将Callable实例传入FutureTask类。
- 使用FutureTask对象作为Thread对象的target创建并启动新线程。
- 调用FutureTask对象的get()方法来获得子线程结束后的返回值。
3.示例代码:
- MyCallable类:
public class MyCallable implements Callable<Integer>{public Integer call() throws Exception { int sum = 0;for (int i = 0; i < 100; i++) { System.out.println(Thread.currentThread().getName()+"--->"+i);sum ++;} return sum;}
}
- main类
public class Main {public static void main(String[] args) throws Exception {System.out.println("----------Callable测试-----------------");Callable<Integer> myCallable = new MyCallable();FutureTask<Integer> future = new FutureTask<Integer>(myCallable);Thread thread = new Thread(future);thread.start();try {int sum = future.get();System.out.println("funture计算完成:"+sum);} catch (Exception e) { e.printStackTrace();}
}
- 启动后我们可以看到主线程定义的sum变量成功取到MyCallable实例计算得到的sum值。
4.扩展
在Future接口里定义如下几个公共方法来控制它关联的Callable任务
试图取消该Future里关联的Callable任务
boolean cancel(boolean mayInterruptIfRunning)
返回Callable任务里call()方法的返回值。调用该方法将导致程序阻塞,必须等到子线程结束才会得到返回值
V get()
返回Callable任务里call()方法的返回值,该方法让程序最多阻塞timeout长的时间,unit为时间单位,如果经过指定时间后Callable任务依然没有返回值,将会抛出TimeoutException异常
V get(long timeout,TimeUnit unit)
如果此Callable任务正常完成前被取消,则返回true
boolean isCancelled()
如果Callable任务已经完成,则返回true
boolean isDone()
原文链接:https://blog.csdn.net/m0_38075425/article/details/81606393
java多线程之Callable接口相关推荐
- Java多线程之Callable接口的实现
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.ut ...
- Java多线程之Callable、Future和FutureTask
Java多线程之Callable接口 自己想总结一下的,看到一篇总结的更好的博客,就转载了,突然感觉真轻松,哈哈哈哈 文章转载于:Matrix海子:Java并发编程:Callable.Future和F ...
- java callable接口_Java多线程之Callable接口的实现有返回值的线程
import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util. ...
- Java多线程之Lock接口
为什么80%的码农都做不了架构师?>>> Lock接口通过底层框架的形式为设计更面向对象.可更加细粒度控制线程代码.更灵活控制线程通信提供了基础.实现Lock接口且使用得比较多 ...
- Java多线程之8Lock问题解析
Java多线程之8Lock问题解析 本文目录 1. 8Lock实例: 标准访问的时候,请问先打印邮件还是短信? sendEmail方法暂停4秒钟,请问先打印邮件还是短信? 新增Hello普通方法,请问 ...
- Java多线程之Runable与Thread
Java多线程是Java开发中的基础内容,但是涉及到高并发就有很深的研究可做了. 最近看了下<Java并发实战>,发先有些地方,虽然可以理解,但是自己在应用中很难下手. 所以还是先回顾一下 ...
- 多线程之callable详解
多线程之callable详解 面试有人会问:线程的实现方式有几种? 很多人可能回答:2种,继承Thread类,实现Runnable接口. 很多忽略了callable这种方式. 也许有人知道callab ...
- JAVA多线程之wait/notify
本文主要学习JAVA多线程中的 wait()方法 与 notify()/notifyAll()方法的用法. ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 ②wait ...
- Java多线程之Synchronized和Lock的区别
Java多线程之Synchronized和Lock的区别 目录: 原始构成 使用方法 等待是否可以中断 加锁是否公平 锁绑定多个条件Condition 小结:Lock相比较Synchronized的优 ...
最新文章
- sqlserver中删除重复行的方法
- Docker / 深入理解的容器和镜像
- Laravel核心解读--完结篇 1
- python下载官网-Python2.7.10
- 视频帧率对人眼主观感受的影响 2
- 项目管理实例—— 点评
- 怎么判断子元素距离父元素顶部位置_css子元素如何相对父元素定位?
- 利用Linux系统实现VLAN间的单臂路由及安全网关的功能
- csr蓝牙驱动Linux,csr harmony蓝牙适配器驱动
- LAGON ATOLL
- 信噪比与雷达探测距离之间关系
- android格式化sd卡软件,如何在各种设备中把SD卡格式化?附误格式化数据恢复方法!...
- Junit4 initializationError初始化错误 终于解决了!!!
- [CTF]天下武功唯快不破
- 求丑数(判断一个整数是否是丑数)
- Single Image Dehazing via Multi-Scale Convolutional Neural Networks
- 9.绘制统计图形——饼图
- HTML-6.表单学习—如何做一个注册(登录)网页
- python情感分析(真实案例完整流程)
- 100.[leetcode]same-tree