Java并发之构建异步任务
来源:互联网 发布:弱碱性水的好处 知乎 编辑:程序博客网 时间:2024/06/06 08:41
有个小朋友表示我写的并发文章,不够细,看了还是不太明白。
我的写作水平实在有限,泪奔。
后面我尽量写的详细简单,尽量多讲点例子。
异步对应的就是同步。
同步的程序大家写的非常的多,同步就是指程序对所有的操作都是串行的处理。一系列的任务A,B,C,D…必须一个一个的处理。
而异步则是可以并发同时处理多个任务。
举个栗子吧。
某个网站的用户提交注册需要以下几步:
1,调用用户服务,写入数据库-需要1s
2,发送邮件-需要1s
3, 发送短信-需要1s
如果是同步的程序,串行执行,则用户一共需要等代3s
但是我们注意到,这三个任务相互之间没有依赖关系,可以改成异步并发的来执行,则用户等待的时间一共只需要1s.
异步通常代表着更高的性能和更好的系统资源利用率。
有几种方法可以构建异步的任务
1, Thread和Runnable接口。
Runnable是最基本任务表现形式,但不能返回值。
Thread thread1 = new Thread( new Runnable(){ public void run(){ //写入数据库 } });thread1.start();Thread thread2 = new Thread( new Runnable(){ public void run(){ //发送邮件 } });thread4.start();Thread thread3 = new Thread( new Runnable(){ public void run(){ //发送邮件 } });thread3.start();
2, Future
Future表示一个任务的生命周期:
1)提供了相应的方法来判断任务是否已经完成或者取消;
2)还能获取任务的结果;
3)可以取消任务。
最常用的是通过ExecutorService的submit方法提交任务,会返回一个Future。
ExecutorService的submit方法可以提交Runnable和Callable任务;
对于Callable任务,Future的get方法可以获得返回值。
ExecutorService executorService = Executors.newFixedThreadPool(10);//定义Callable, 返回一个结果Callable<Integer> task = ()->{ try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return 5;};Future<Integer> future = executorService.submit(task);Integer result = future.get();System.out.println(result);
在实际的开发中,对于耗时比较长得操作,都可以考虑异步的方式来执行。
一方面可以大大提高资源利用率和性能;
并且对于用户交互的任务,可以大大减少用户的等待时间,提升用户体验。
- Java并发之构建异步任务
- Java并发编程-26-异步运行任务
- Java并发之终结任务
- 【Java并发】- 使用CompletionService异步收集任务结果
- 【Java并发编实战】基础构建模块与任务执行
- Java 并发编程之基础构建模块
- Java 并发编程之任务执行
- Java 并发编程之任务取消
- Java并发之定时任务接口ScheduledExecutorService
- 【java并发】构建并发应用程序
- 线程之异步任务
- 异步任务之AsyncTASK
- 架构之异步任务
- java异步任务处理
- java异步任务处理
- Java并发--任务执行
- Java并发--任务执行
- Java并发--任务执行
- js中的$
- 使用Messenger进行Activity与Service之间的双向通信
- node.js 文档总结,持续更新
- SDUT-1272-->面向对象程序设计上机练习十(运算符重载)
- spring aop实现
- Java并发之构建异步任务
- clickhose之操作提示 Operations Tips
- 如何使用Android Studio获取Android签名
- 小程序rich-text在iso上无效的问题
- ps详解
- 手把手让你了解linux上集群原理篇【图解】
- iOS 获取当前页面
- Java8函数式编程入门
- Monkey测试系列:1. Monkey入门