java代碼異步 java異步處理方法
java異步方法什么意思
在JAVA平臺(tái),實(shí)現(xiàn)異步調(diào)用的角色有如下三個(gè)角色:調(diào)用者,取貨憑證,真實(shí)數(shù)據(jù)
異步調(diào)用就是:一個(gè)調(diào)用者在調(diào)用耗時(shí)操作,不能立即返回?cái)?shù)據(jù)時(shí),先返回一個(gè)取貨憑證.然后在過(guò)一斷時(shí)間后憑取貨憑證來(lái)獲取真正的數(shù)據(jù).
如果數(shù)據(jù)將在線程間共享。例如正在寫(xiě)的數(shù)據(jù)以后可能被另一個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個(gè)線程寫(xiě)過(guò)了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取。當(dāng)應(yīng)用程序在對(duì)象上調(diào)用了一個(gè)需要花費(fèi)很長(zhǎng)時(shí)間來(lái)執(zhí)行的方法,并且不希望讓程序等待方法的返回時(shí),就應(yīng)該使用異步編程,在很多情況下采用異步途徑往往更有效率
只有一個(gè)馬桶
很多人上廁所
要排隊(duì)
這叫同步迅雷一次可以下載很多東西
這叫異步
java中同步和異步有什么異同?
Java中交互方式分為同步和異步兩種:
相同的地方:
都屬于交互方式,都是發(fā)送請(qǐng)求。
不同的地方:
同步交互:指發(fā)送一個(gè)請(qǐng)求,需要等待返回,然后才能夠發(fā)送下一個(gè)請(qǐng)求,有個(gè)等待過(guò)程;
異步交互:指發(fā)送一個(gè)請(qǐng)求,不需要等待返回,隨時(shí)可以再發(fā)送下一個(gè)請(qǐng)求,即不需要等待。?區(qū)別:一個(gè)需要等待,一個(gè)不需要等待,在部分情況下,我們的項(xiàng)目開(kāi)發(fā)中都會(huì)優(yōu)先選擇不需要等待的異步交互方式。
擴(kuò)展資料:
Java,是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語(yǔ)言和Java平臺(tái)的總稱。用Java實(shí)現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺(tái)、動(dòng)態(tài)的Web、Internet計(jì)算。從此,Java被廣泛接受并推動(dòng)了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)均支持Java applet
Java是一種簡(jiǎn)單的,面向?qū)ο蟮?,分布式的,解釋型的,健?a href='http://mengdiqiu.com.cn/dedecms_aq/' target='_blank'>安全的,結(jié)構(gòu)中立的,可移植的,性能優(yōu)異、多線程的動(dòng)態(tài)語(yǔ)言。
當(dāng)1995年SUN推出Java語(yǔ)言之后,全世界的目光都被這個(gè)神奇的語(yǔ)言所吸引。那么Java到底有何神奇之處呢?
Java語(yǔ)言其實(shí)最早誕生于1991年,起初被稱為OAK語(yǔ)言,是SUN公司為一些消費(fèi)性電子產(chǎn)品而設(shè)計(jì)的一個(gè)通用環(huán)境。他們最初的目的只是為了開(kāi)發(fā)一種獨(dú)立于平臺(tái)的軟件技術(shù),而且在網(wǎng)絡(luò)出現(xiàn)之前,OAK可以說(shuō)是默默無(wú)聞,甚至差點(diǎn)夭折。但是,網(wǎng)絡(luò)的出現(xiàn)改變了OAK的命運(yùn)。
參考資料:java基礎(chǔ) 百度百科
java 異步調(diào)用方法
1. 使用wait和notify方法
這個(gè)方法其實(shí)是利用了鎖機(jī)制,直接貼代碼:
public class Demo1 extends BaseDemo{ private final Object lock = new Object(); @Override public void callback(long response) { System.out.println("得到結(jié)果"); System.out.println(response); System.out.println("調(diào)用結(jié)束"); 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("主線程內(nèi)容"); } }
可以看到在發(fā)起調(diào)用后,主線程利用wait進(jìn)行阻塞,等待回調(diào)中調(diào)用notify或者notifyAll方法來(lái)進(jìn)行喚醒。注意,和大家認(rèn)知的一樣,這里wait和notify都是需要先獲得對(duì)象的鎖的。在主線程中最后我們打印了一個(gè)內(nèi)容,這也是用來(lái)驗(yàn)證實(shí)驗(yàn)結(jié)果的,如果沒(méi)有wait和notify,主線程內(nèi)容會(huì)緊隨調(diào)用內(nèi)容立刻打印;而像我們上面的代碼,主線程內(nèi)容會(huì)一直等待回調(diào)函數(shù)調(diào)用結(jié)束才會(huì)進(jìn)行打印。
沒(méi)有使用同步操作的情況下,打印結(jié)果:發(fā)起調(diào)用 調(diào)用返回 主線程內(nèi)容 得到結(jié)果 1 調(diào)用結(jié)束
而使用了同步操作后:
發(fā)起調(diào)用 調(diào)用返回 得到結(jié)果 9 調(diào)用結(jié)束 主線程內(nèi)容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("得到結(jié)果"); System.out.println(response); System.out.println("調(diào)用結(jié)束"); 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("主線程內(nèi)容"); } }
基本上和方法一沒(méi)什么區(qū)別,只是這里使用了條件鎖,兩者的鎖機(jī)制有所不同。
上一篇:java修改運(yùn)行中的代碼 java代碼在哪里修改
欄 目:Java編程
下一篇:沒(méi)有了
本文標(biāo)題:java代碼異步 java異步處理方法
本文地址:http://mengdiqiu.com.cn/a1/Javabiancheng/17306.html
您可能感興趣的文章
- 04-07java修改運(yùn)行中的代碼 java代碼在哪里修改
- 04-07java命令行代碼 java中命令行在哪打開(kāi)
- 04-07java時(shí)鐘日歷代碼 java實(shí)現(xiàn)日歷
- 04-07java購(gòu)物車系統(tǒng)源代碼 javabean購(gòu)物車
- 04-07用java代碼做心形 java制作愛(ài)心
- 04-07貪吃蛇原代碼java 貪吃蛇游戲代碼java
- 04-07java連連看腳本源代碼 java 連連看
- 04-06駕校管理系統(tǒng)java代碼 駕校管理系統(tǒng)java代碼
- 04-06java手動(dòng)輸入數(shù)據(jù)代碼 java怎么輸入一個(gè)數(shù)
- 04-06整潔java代碼 java代碼例子講解


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-07java代碼異步 java異步處理方法
- 04-07java修改運(yùn)行中的代碼 java代碼在哪里
- 04-07java命令行代碼 java中命令行在哪打開(kāi)
- 04-07java時(shí)鐘日歷代碼 java實(shí)現(xiàn)日歷
- 04-07java購(gòu)物車系統(tǒng)源代碼 javabean購(gòu)物車
- 04-07用java代碼做心形 java制作愛(ài)心
- 04-07貪吃蛇原代碼java 貪吃蛇游戲代碼ja
- 04-07java連連看腳本源代碼 java 連連看
- 04-06駕校管理系統(tǒng)java代碼 駕校管理系統(tǒng)
- 04-06java手動(dòng)輸入數(shù)據(jù)代碼 java怎么輸入一
隨機(jī)閱讀
- 01-10C# 添加、修改和刪除PDF書(shū)簽的實(shí)例代
- 01-10詳解C語(yǔ)言中Char型指針數(shù)組與字符數(shù)組
- 01-10Unity shader實(shí)現(xiàn)遮罩效果
- 01-11如何判斷電子郵件的地址格式是否正
- 01-10用vbs實(shí)現(xiàn)取消隱藏文件夾中的所有文
- 01-10在C語(yǔ)言中比較兩個(gè)字符串是否相等的
- 01-10常用的C語(yǔ)言排序算法(兩種)
- 01-10java通過(guò)反射創(chuàng)建對(duì)象并調(diào)用方法
- 04-04建設(shè)一個(gè)網(wǎng)站要多少費(fèi)用-怎么可以錯(cuò)
- 01-10詳解dll動(dòng)態(tài)庫(kù)的開(kāi)發(fā)與調(diào)用及文件的