Java通过Callable实现多线程
Callable实现多线程
在java.util.concurrent包下,相比较于通过实现Runnable接口的run方法来实现多线程,优点在于可以有返回值,可以抛出异常,因为run方法是void的,并且不能抛出异常,但是Callable的方式缺点在于较为繁琐。
Callable的任务执行后可返回值,运行Callable任务可以拿到一个Future对象。Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检查计算的结果。通过Future对象可以了解任务的执行情况,可以取消任务的执行,还可以获取任务的执行结果。
思路:
(1)创建Callable实现类+重写call方法;
(2)借助执行调度服务ExecutorService,获取Future对象
ExecutorService ser = Executors.newFixedThreadPool(2); Future result = ser.submit(实现类对象)
(3)获取result.get();
(4)停止服务ser.shutdownNow();
下面是一个小demo,龟兔赛跑的例子:
package multi_Thread;
import java.util.concurrent.*;
/**
* 使用Callable创建线程
* Created by dd on 2016/6/4 0004.
*/
public class demo01 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 创建线程
ExecutorService ser = Executors.newFixedThreadPool(2);
Race tortoise = new Race("乌龟",1000);
Race rabbit = new Race("兔子",500);
Future<Integer> result1 = ser.submit(tortoise);
Future<Integer> result2 = ser.submit(rabbit);
Thread.sleep(2000);
tortoise.setFlag(false);
rabbit.setFlag(false);
// 获取值
Integer num1 = result1.get();
Integer num2 = result2.get();
System.out.println("乌龟"+num1);
System.out.println("兔子"+num2);
// 停止服务
ser.shutdownNow();
}
}
class Race implements Callable<Integer>{
private String name;//名称
private long time;//延时时间
private boolean flag = true;
private int step = 0;
public Race() {
}
public Race(String name) {
super();
this.name = name;
}
public Race(String name, long time) {
super();
this.name = name;
this.time = time;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public int getStep() {
return step;
}
public void setStep(int step) {
this.step = step;
}
@Override
public Integer call() throws Exception {
while (flag){
Thread.sleep(time);
step++;
}
return step;
}
}到此这篇关于Java通过Callable实现多线程的文章就介绍到这了,更多相关Callable实现多线程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
- Java使用多线程批次查询大量数据(Callable返回数据)方式
- Java多线程中Callable和Future的解读
- Java中的Callable实现多线程详解
- Java使用Callable接口实现多线程的实例代码
- Java多线程实现之Callable详解
- Java中Runnable和Callable分别什么时候使用
- Java中Runnable与Callable接口的区别详解
- 详解Java中Callable和Future的区别
- Java使用Runnable和Callable实现多线程的区别详解
- java面试常问的Runnable和Callable的区别
- Java并发教程之Callable和Future接口详解
- Java中callable的实现原理
相关文章
java发送HttpClient请求及接收请求结果过程的简单实例
下面小编就为大家带来一篇java发送HttpClient请求及接收请求结果过程的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-11-11
详解java中的PropertyChangeSupport与PropertyChangeListener
这篇文章主要介绍了详解java中的PropertyChangeSupport与PropertyChangeListener的相关资料,需要的朋友可以参考下2017-09-09
IntelliJ IDEA 无法正常使用SVN的问题和完美解决办法
这篇文章主要介绍了IntelliJ IDEA 无法正常使用SVN的问题和解决办法,本文给大家分享完美解决方案,通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-08-08


最新评论