「java的promise」java的promise使用

博主:adminadmin 2022-12-04 01:15:07 105

今天给各位分享java的promise的知识,其中也会对java的promise使用进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

下面哪些方法可以用作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使用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-04,除非注明,否则均为首码项目网原创文章,转载请注明出处。