通过Callable接口实现多线程
来源:互联网 发布:七天网络查询成绩注册 编辑:程序博客网 时间:2024/05/21 20:21
之前通过继承Thread类实现多线程,通过Runnable接口+静态代理实现多线程
但是有一个不足之处是,重写run方法时没有返回值也不能抛出异常
使用Callable接口就可以解决这个问题
Callable接口和Runnable接口的不同之处:
1.Callable规定的方法是call,而Runnable是run
2.call方法可以抛出异常,但是run方法不行
3.Callable对象执行后可以有返回值,运行Callable任务可以得到一个Future对象,通过Future对象可以了解任务执行情况,可以取消任务的执行,而Runnable不可有返回值
多线程的实现有以下4个步骤:
1.创建一个线程,创建Callable的实现类Race,并且重写call方法
ExecutorService ser=Executors.newFixedThreadPool(线程数目);
Race tortoise = new Race();
2.得到Future对象
Future<Integer> result=ser.submit(tortoise);
3.获取返回值
int num=result.get();
4.停止服务
ser.shutdown();
举一个龟兔赛跑的例子,直接上代码吧
public class Call {public static void main(String[] args) throws InterruptedException, ExecutionException {ExecutorService ser=Executors.newFixedThreadPool(2);Race tortoise=new Race("tortoise",1000);Race rabbit = new Race("rabbit",500);//获取值Future<Integer> resultR=ser.submit(rabbit);Future<Integer> resultT=ser.submit(tortoise);Thread.sleep(3000);rabbit.setFlag(false);tortoise.setFlag(false);int numR=resultR.get();int numT=resultT.get();System.out.println("rabbit ---"+numR);System.out.println("tortoise ---"+numT);//停止服务ser.shutdown();}}class Race implements Callable<Integer>{private int step=0;private String name;private long time;private boolean flag=true;Race(String name,long time){this.name=name;this.time=time;}@Overridepublic Integer call() throws Exception {while(flag){Thread.sleep(time);step++;}return step;}public void setFlag(boolean flag){this.flag=flag;}}
0 0
- 通过Callable接口实现多线程
- 通过Callable接口实现多线程
- 通过Callable接口实现多线程
- 通过Callable实现多线程
- 通过Callable实现多线程
- 通过Callable实现多线程
- Callable接口实现多线程
- Callable接口实现多线程
- java 多线程callable接口实现
- 使用Callable接口实现多线程
- Java多线程之Callable接口的实现
- Java多线程之Callable接口的实现
- Java多线程之Callable接口的实现
- Java多线程之Callable接口的实现
- Java多线程之Callable接口的实现
- JAVA多线程Callable接口的实现
- Java多线程之Callable接口的实现
- Java多线程之Callable接口的实现
- MATLAB画图像文件的颜色分布直方图
- open .zshrc文件配置
- Solr之搭建Solr6.0服务并从Mysql上导入数据
- 移动无线测试技能树
- PowerPoint2007从“幻灯片”窗格中新建幻灯片
- 通过Callable接口实现多线程
- Thirft框架介绍
- 欢迎使用CSDN-markdown编辑器
- win7 64位安装redis 及Redis Desktop Manager使用
- 使用python开发json、csv数据格式转换工具
- android 修改图片的宽高
- JVM内存管理(详)
- 多线程使用callable返回值
- 基于Netty5.0高级案例二之WebSocket中关于使用ProtoBuf传输数据介绍js部分