「java的promise」java的promise使用
今天给各位分享java的promise的知识,其中也会对java的promise使用进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、下面哪些方法可以用作javascript异步模式的编程
- 2、如何优雅的处理 Promise 的 if-else 分支
- 3、Java题目产生15个20~9999之间的随机整数,然后利用BufferedWriter类将其写入文件file2.txt中;
- 4、Future和Promise的分析
- 5、promises和callback的区别
下面哪些方法可以用作javascript异步模式的编程
javascript语言是单线程机制。所谓单线程就是按次序执行,执行完一个任务再执行下一个。
对于浏览器来说,也就是无法在渲染页面的同时执行代码。
单线程机制的优点在于实现起来较为简单,运行环境相对简单。缺点在于,如果中间有任务需要响应时间过长,经常会导致
页面加载错误或者浏览器无响应的状况。这就是所谓的逗同步模式地,程序执行顺序与任务排列顺序一致。对于浏览器来说,
同步模式效率较低,耗时长的任务都应该使用异步模式;而在服务器端,异步模式则是唯一的模式,如果采用同步模式个人认为
服务器很快就会出现12306在高峰期的表现。。。。
异步模式的四种方式:
1.回调函数callback
所谓回调函数,就是将函数作为参数传到需要回调的函数内部再执行。
典型的例子就是发送ajax请求。例如:
$.ajax({
async: false,
cache: false,
dataType: 'json',
url: "url",
success: function(data) {
console.log('success');
},
error: function(data) {
console.log('error');
}
})
当发送ajax请求后,等待回应的过程不会堵塞程序运行,耗时的操作相当于延后执行。
回调函数的优点在于简单,容易理解,但是可读性较差,耦合度较高,不易于维护。
2.事件驱动
javascript可以称之为是基于对象的语言,而基于对象的基本特征就是事件驱动(Event-Driven)。
事件驱动,指的是由鼠标和热键的动作引发的一连串的程序操作。
例如,为页面上的某个
$('#btn').onclick(function(){
console.log('click button');
});
绑定事件相当于在元素上进行监听,是否执行注册的事件代码取决于事件是否发生。
优点在于容易理解,一个元素上可以绑定多个事件,有利于实现模块化;但是缺点在于称为事件驱动的模型后,流程不清晰。
3.发布/订阅
发布订阅模式(publish-subscribe pattern)又称为观察者模式(Observer pattern)。
该模式中,有两类对象:观察者和目标对象。目标对象中存在着一份观察者的列表,当目标对象
的状态发生改变时,主动通知观察者,从而建立一种发布/订阅的关系。
jquery有相关的插件,在这不是重点不细说了。。。。回头写个实现贴上来
4.promise模式
promise对象是CommonJS工作组提供的一种规范,用于异步编程的统一接口。
promise对象通常实现一种then的方法,用来在注册状态发生改变时作为对应的回调函数。
promise模式在任何时刻都处于以下三种状态之一:未完成(unfulfilled)、已完成(resolved)和拒绝(rejected)。以CommonJS
Promise/A
标准为例,promise对象上的then方法负责添加针对已完成和拒绝状态下的处理函数。then方法会返回另一个promise对象,以便于形成promise管道,这种返回promise对象的方式能够支持开发人员把异步操作串联起来,如then(resolvedHandler,
rejectedHandler); 。resolvedHandler
回调函数在promise对象进入完成状态时会触发,并传递结果;rejectedHandler函数会在拒绝状态下调用。
Jquery在1.5的版本中引入了一个新的概念叫Deferred,就是CommonJS promise A标准的一种衍生。可以在jQuery中创建
$.Deferref的对象。同时也对发送ajax请求以及数据类型有了新的修改,参考JQuery API。
除了以上四种,javascript中还可以利用各种函数模拟异步方式,更有诡异的诸如用同步调用异步的case
只能用team里同事形容java和javascript的一句话作为结尾:
逗写java像在高速路上开车,写javascript像在草原上开车地-------------以此来形容javascript这种无类型的语言有多自由
but,如果草原上都是坑。
如何优雅的处理 Promise 的 if-else 分支
当 Promise 遇到 if-else 分支总感觉不伦不类。因为 java 拥抱函数式编程的同时又不得不考虑到自己是命令式语言。
java 宣称自己可以面向对象、面向过程、面向函数。言外之意就是,厉害吧。而现实是,大部分 JSer 都在混合式编程,不伦不类,不三不四。
回到上面的问题:首先在写法上 .then(do1()).then(do2())就是错误的,正确的写法应该是.then(do1).then(do2)——传入的是函数,而不是函数调用后的返回值。
Java题目产生15个20~9999之间的随机整数,然后利用BufferedWriter类将其写入文件file2.txt中;
import java.util.*;
import java.io.*;
public class subject10 {
public static void main(String[] args) throws IOException {
BufferedWriter ri = new BufferedWriter(new FileWriter("d:\\cgj\\file2.txt"));
Random ra = new Random();
int[] rr = new int[15];
for (int i = 0; i 15; i++) {
rr[i] = ra.nextInt(9979) + 20;
System.out.println(rr[i]);
ri.write(String.valueOf(rr[i]));
ri.newLine();
}
ri.flush();
System.out.println("------------------------------");
ri.close();
FileInputStream fin = new FileInputStream(("d:\\cgj\\file2.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(fin));
try {
for (int i = 0; i 15; i++) {
rr[i] = Integer.parseInt(br.readLine());
}
} catch (IOException e) {
}
br.close();
int temp;
for (int i = 0; i 14; i++) {
if (rr[i] rr[i + 1]) {
temp = rr[i];
rr[i] = rr[i + 1];
rr[i + 1] = temp;
}
}
for (int ea : rr)
System.out.println(ea);
}
}
Future和Promise的分析
Future用来异步来获取结果如get()方法,当执行完成时,返回结果;当没有则阻塞。
Future继承了java的Future,主要扩展了监听器的方法,当io操作完成后发生回调。
ChannelFuture继承了netty的Future,表示没有返回值的异步绑定,同时和一个Channel进行绑定
具体实例见文档示例
特殊的可写future
Future:成功和失败是有netty来判断即当io操作完成后,即成功或失败做出对应的操作。
Promise:成功和失败由调用者来判断。
promises和callback的区别
Promise
承诺
callback
英 [ˈkɔ:lbæk] 美 [ˈkɔlˌbæk]
n.
回收,回叫信号,复查
并发编程 Promise, Future 和 Callback
在并发编程中,我们通常会用到一组非阻塞的模型:Promise,Future 和 Callback。其中的 Future 表示一个可能还没有实际完成的异步任务的结果,针对这个结果可以添加 Callback 以便在任务执行成功或失败后做出对应的操作,而 Promise 交由任务执行者,任务执行者通过 Promise 可以标记任务完成或者失败。 可以说这一套模型是很多异步非阻塞架构的基础。
这一套经典的模型在 Scala、C# 中得到了原生的支持,但 JDK 中暂时还只有无 Callback 的 Future 出现,当然也并非在 JAVA 界就没有发展了,比如 Guava 就提供了ListenableFuture 接口,而 Netty 4+ 更是提供了完整的 Promise、Future 和 Listener 机制,在 Netty 的官方文档 Using as a generic library 中也介绍了将 Netty 作为一个 lib 包依赖,并且使用 Listenable futures 的示例。在实际的项目使用中,发现 Netty 的 EventLoop 机制不一定适用其他场景,因此想去除对 EventLoop 的依赖,实现一个简化版本。
希望对你有帮助~
关于java的promise和java的promise使用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-04,除非注明,否则均为
原创文章,转载请注明出处。