java代码异步 java异步处理方法
java异步方法什么意思
在JAVA平台,实现异步调用的角色有如下三个角色:调用者,取货凭证,真实数据
异步调用就是:一个调用者在调用耗时操作,不能立即返回数据时,先返回一个取货凭证.然后在过一断时间后凭取货凭证来获取真正的数据.
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率
只有一个马桶
很多人上厕所
要排队
这叫同步迅雷一次可以下载很多东西
这叫异步
java中同步和异步有什么异同?
Java中交互方式分为同步和异步两种:
相同的地方:
都属于交互方式,都是发送请求。
不同的地方:
同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;
异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。 区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。
扩展资料:
Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现均支持Java applet
Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。
当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言所吸引。那么Java到底有何神奇之处呢?
Java语言其实最早诞生于1991年,起初被称为OAK语言,是SUN公司为一些消费性电子产品而设计的一个通用环境。他们最初的目的只是为了开发一种独立于平台的软件技术,而且在网络出现之前,OAK可以说是默默无闻,甚至差点夭折。但是,网络的出现改变了OAK的命运。
参考资料:java基础 百度百科
java 异步调用方法
1. 使用wait和notify方法
这个方法其实是利用了锁机制,直接贴代码:
public class Demo1 extends BaseDemo{ private final Object lock = new Object(); @Override public void callback(long response) { System.out.println("得到结果"); System.out.println(response); System.out.println("调用结束"); synchronized (lock) { lock.notifyAll(); } } public static void main(String[] args) { Demo1 demo1 = new Demo1(); demo1.call(); synchronized (demo1.lock){ try { demo1.lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("主线程内容"); } }
可以看到在发起调用后,主线程利用wait进行阻塞,等待回调中调用notify或者notifyAll方法来进行唤醒。注意,和大家认知的一样,这里wait和notify都是需要先获得对象的锁的。在主线程中最后我们打印了一个内容,这也是用来验证实验结果的,如果没有wait和notify,主线程内容会紧随调用内容立刻打印;而像我们上面的代码,主线程内容会一直等待回调函数调用结束才会进行打印。
没有使用同步操作的情况下,打印结果:发起调用 调用返回 主线程内容 得到结果 1 调用结束
而使用了同步操作后:
发起调用 调用返回 得到结果 9 调用结束 主线程内容2. 使用条件锁
和方法一的原理类似:
public class Demo2 extends BaseDemo { private final Lock lock = new ReentrantLock(); private final Condition con = lock.newCondition(); @Override public void callback(long response) { System.out.println("得到结果"); System.out.println(response); System.out.println("调用结束"); lock.lock(); try { con.signal(); }finally { lock.unlock(); } } public static void main(String[] args) { Demo2 demo2 = new Demo2(); demo2.call(); demo2.lock.lock(); try { demo2.con.await(); } catch (InterruptedException e) { e.printStackTrace(); }finally { demo2.lock.unlock(); } System.out.println("主线程内容"); } }
基本上和方法一没什么区别,只是这里使用了条件锁,两者的锁机制有所不同。
栏 目:Java编程
下一篇:没有了
本文标题:java代码异步 java异步处理方法
本文地址:https://www.xiuzhanwang.com/a1/Javabiancheng/17306.html
您可能感兴趣的文章
- 04-07java修改运行中的代码 java代码在哪里修改
- 04-07java命令行代码 java中命令行在哪打开
- 04-07java时钟日历代码 java实现日历
- 04-07java购物车系统源代码 javabean购物车
- 04-07用java代码做心形 java制作爱心
- 04-07贪吃蛇原代码java 贪吃蛇游戏代码java
- 04-07java连连看脚本源代码 java 连连看
- 04-06驾校管理系统java代码 驾校管理系统java代码
- 04-06java手动输入数据代码 java怎么输入一个数
- 04-06整洁java代码 java代码例子讲解
阅读排行
本栏相关
- 04-07java代码异步 java异步处理方法
- 04-07java修改运行中的代码 java代码在哪里
- 04-07java命令行代码 java中命令行在哪打开
- 04-07java时钟日历代码 java实现日历
- 04-07java购物车系统源代码 javabean购物车
- 04-07用java代码做心形 java制作爱心
- 04-07贪吃蛇原代码java 贪吃蛇游戏代码ja
- 04-07java连连看脚本源代码 java 连连看
- 04-06驾校管理系统java代码 驾校管理系统
- 04-06java手动输入数据代码 java怎么输入一
随机阅读
- 01-10C# 添加、修改和删除PDF书签的实例代
- 01-10详解C语言中Char型指针数组与字符数组
- 01-10Unity shader实现遮罩效果
- 01-11如何判断电子邮件的地址格式是否正
- 01-10用vbs实现取消隐藏文件夹中的所有文
- 01-10在C语言中比较两个字符串是否相等的
- 01-10常用的C语言排序算法(两种)
- 01-10java通过反射创建对象并调用方法
- 04-04建设一个网站要多少费用-怎么可以错
- 01-10详解dll动态库的开发与调用及文件的