本教程操作環(huán)境:windows7系統(tǒng)、java10版,DELL G3電腦。
同步在java中的應(yīng)用
1.概念
是一種典型的請(qǐng)求-響應(yīng)模型,當(dāng)請(qǐng)求調(diào)用一個(gè)函數(shù)或方法后,需等待其響應(yīng)返回,然后執(zhí)行后續(xù)代碼。同步的特征便是「有序」,當(dāng)各個(gè)過程都執(zhí)行完畢,最后返回結(jié)果。
2.同步原理
當(dāng)有多個(gè)線程要同時(shí)訪問一個(gè)變量或?qū)ο髸r(shí),如果這些線程中既有讀又有寫操作時(shí),就會(huì)導(dǎo)致變量值或?qū)ο蟮臓顟B(tài)出現(xiàn)混亂,從而導(dǎo)致程序異常。
舉個(gè)例子,如果一個(gè)銀行賬戶同時(shí)被兩個(gè)線程操作,一個(gè)取100塊,一個(gè)存錢100塊。假設(shè)賬戶原本有0塊,如果取錢線程和存錢線程同時(shí)發(fā)生,會(huì)出現(xiàn)什么結(jié)果呢?取錢不成功,賬戶余額是100。取錢成功了,賬戶余額是0,那到底是哪個(gè)呢?很難說清楚。因此多線程同步就是要解決這個(gè)問題。
3.實(shí)例
synchronized關(guān)鍵字
使用synchronized關(guān)鍵字我們可以實(shí)現(xiàn)同步代碼塊
java異步的使用
1.概念
異步編程是只發(fā)送了調(diào)用的指令,調(diào)用者無需等待被調(diào)用的方法執(zhí)行完畢,而是繼續(xù)執(zhí)行下面的流程。在一個(gè)多處理器或多核的環(huán)境中,異步調(diào)用是真正的并行執(zhí)行。
2.應(yīng)用場(chǎng)景
(1)充分利用計(jì)算機(jī)CPU資源,不讓主程序阻塞在某個(gè)長(zhǎng)時(shí)間運(yùn)行的任務(wù)上,從而優(yōu)化主程序的執(zhí)行時(shí)間;
(2)異步編程 + NIO。NIO 技術(shù)本身現(xiàn)在已經(jīng)很成熟了,異步編程技術(shù)將 NIO 落地到系統(tǒng),尤其是業(yè)務(wù)快速迭代的前臺(tái)、中臺(tái)系統(tǒng)中。
3.實(shí)例
可以創(chuàng)建一個(gè)新線程來異步執(zhí)行任何操作。隨著Java 8 中l(wèi)ambda表達(dá)式的發(fā)布,它變得更干凈,更易讀。
創(chuàng)建一個(gè)新的線程來計(jì)算和打印數(shù)字的階乘:
以上就是在java中關(guān)于同步、異步的使用,在多個(gè)程序需要運(yùn)行處理的時(shí)候,就可以選擇異步的方法去處理,對(duì)應(yīng)的同步也會(huì)為大家?guī)硪恍┲v解,可以關(guān)注和留意。更多關(guān)于“Java培訓(xùn)”的問題,歡迎咨詢千鋒教育在線名師。千鋒已有十余年的培訓(xùn)經(jīng)驗(yàn),課程大綱更科學(xué)更專業(yè),有針對(duì)零基礎(chǔ)的就業(yè)班,有針對(duì)想提升技術(shù)的好程序員班,高品質(zhì)課程助力你實(shí)現(xiàn)java程序員夢(mèng)想。