通过Callable实现多线程
来源:互联网 发布:亿级别数据库 编辑:程序博客网 时间:2024/05/01 12:29
在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; }}
阅读全文
0 0
- 通过Callable实现多线程
- 通过Callable实现多线程
- 通过Callable实现多线程
- 通过Callable接口实现多线程
- 通过Callable接口实现多线程
- 通过Callable接口实现多线程
- 利用callable实现多线程
- Callable接口实现多线程
- Callable接口实现多线程
- java 多线程callable接口实现
- 使用Callable接口实现多线程
- 线程池 Callable实现多线程
- Java多线程之Callable接口的实现
- Java多线程之Callable接口的实现
- Java多线程之Callable接口的实现
- Java多线程之Callable接口的实现
- Java多线程之Callable接口的实现
- JAVA多线程Callable接口的实现
- python之numpy库[2]
- Java进阶(一)_开始读懂class文件
- 第四届“图灵杯”NEUQ-ACM程序设计竞赛(团队赛)-网络同步赛B(排序)
- OpenDDS开发手册---第二章(开始)4
- c语言入门:用qt实现简单IDE
- 通过Callable实现多线程
- MOOC清华《程序设计基础》第1章第4题:求解方程
- 今天写一个javaweb项目,前台表单提交的数据,后台用BeanUtils.populate(book, request.getParameterMap());怎么也获取不到数据。
- Android中MultiAutoCompleteTextView的运用?
- 多线程按顺序依次打印ABCD---java多线程的一道经典面试题
- Python学习练习5----字典、列表、函数的运用
- 27. OP-TEE驱动篇----libteec接口在驱动中的实现
- Hdu2099 ** 整除的尾数 (改了好久的)
- 【Oracle】——安装Oracle11g