更新時(shí)間:2021-02-03 17:30:31 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1496次
多線程(multithreading)本身就是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù),在Java多線程編程的過(guò)程中會(huì)涉及到許多技術(shù)點(diǎn),需要我們牢牢記住。本文我們就為大家總結(jié)了Java多線程并發(fā)技術(shù)要點(diǎn),讓我們?cè)趯W(xué)習(xí)Java多線程時(shí)少走彎路。
1、并發(fā)編程三要素
原子性:即一個(gè)不可再被分割的顆粒。在Java中原子性指的是一個(gè)或多個(gè)操作要么全部執(zhí)行成功要么全部執(zhí)行失敗。
有序性:程序執(zhí)行的順序按照代碼的先后順序執(zhí)行。(處理器可能會(huì)對(duì)指令進(jìn)行重排序)
可見(jiàn)性:當(dāng)多個(gè)線程訪問(wèn)同一個(gè)變量時(shí),如果其中一個(gè)線程對(duì)其作了修改,其他線程能立即獲取到最新的值。
2、線程的五大狀態(tài)
創(chuàng)建狀態(tài):當(dāng)用 new 操作符創(chuàng)建一個(gè)線程的時(shí)候
就緒狀態(tài):調(diào)用 start 方法,處于就緒狀態(tài)的線程并不一定馬上就會(huì)執(zhí)行 run 方法,還需要等待CPU的調(diào)度
運(yùn)行狀態(tài):CPU 開(kāi)始調(diào)度線程,并開(kāi)始執(zhí)行 run 方法
阻塞狀態(tài):線程的執(zhí)行過(guò)程中由于一些原因進(jìn)入阻塞狀態(tài)比如:調(diào)用 sleep 方法、嘗試去得到一個(gè)鎖等等
死亡狀態(tài):run 方法執(zhí)行完 或者 執(zhí)行過(guò)程中遇到了一個(gè)異常
3、悲觀鎖與樂(lè)觀鎖
悲觀鎖:每次操作都會(huì)加鎖,會(huì)造成線程阻塞。
樂(lè)觀鎖:每次操作不加鎖而是假設(shè)沒(méi)有沖突而去完成某項(xiàng)操作,如果因?yàn)闆_突失敗就重試,直到成功為止,不會(huì)造成線程阻塞。
4、線程之間的協(xié)作
線程間的協(xié)作有:wait/notify/notifyAll等
5、synchronized 關(guān)鍵字
synchronized是Java中的關(guān)鍵字,是一種同步鎖。它修飾的對(duì)象有以下幾種:
1)、修飾一個(gè)代碼塊:被修飾的代碼塊稱為同步語(yǔ)句塊,其作用的范圍是大括號(hào){}括起來(lái)的代碼,作用的對(duì)象是調(diào)用這個(gè)代碼塊的對(duì)象
2)、修飾一個(gè)方法:被修飾的方法稱為同步方法,其作用的范圍是整個(gè)方法,作用的對(duì)象是調(diào)用這個(gè)方法的對(duì)象
3)、修改一個(gè)靜態(tài)的方法:其作用的范圍是整個(gè)靜態(tài)方法,作用的對(duì)象是這個(gè)類的所有對(duì)象
4)、修改一個(gè)類:其作用的范圍是synchronized后面括號(hào)括起來(lái)的部分,作用主的對(duì)象是這個(gè)類的所有對(duì)象。
6、CAS
CAS全稱是Compare And Swap,即比較替換,是實(shí)現(xiàn)并發(fā)應(yīng)用到的一種技術(shù)。操作包含三個(gè)操作數(shù)—內(nèi)存位置(V)、預(yù)期原值(A)和新值(B)。 如果內(nèi)存位置的值與預(yù)期原值相匹配,那么處理器會(huì)自動(dòng)將該位置值更新為新值 。否則,處理器不做任何操作。
CAS存在三大問(wèn)題:ABA問(wèn)題,循環(huán)時(shí)間長(zhǎng)開(kāi)銷大,以及只能保證一個(gè)共享變量的原子操作。
7、線程池
如果我們使用線程的時(shí)候就去創(chuàng)建一個(gè)線程,雖然簡(jiǎn)單,但是存在很大的問(wèn)題。如果并發(fā)線程數(shù)量很多,并且每個(gè)線程都是執(zhí)行一個(gè)時(shí)間很短的任務(wù)就結(jié)束了,這樣頻繁創(chuàng)建線程就會(huì)大大降低系統(tǒng)的效率,因?yàn)轭l繁創(chuàng)建線程和銷毀線程需要時(shí)間。線程池通過(guò)復(fù)用可以大大減少線程頻繁創(chuàng)建與銷毀帶來(lái)的性能上的損耗。
只要我們能夠掌握上述的Java多線程并發(fā)技術(shù)要點(diǎn),學(xué)好Java多線程并發(fā)技術(shù)指日可待。當(dāng)然,光靠這些要點(diǎn)還是遠(yuǎn)遠(yuǎn)不夠的,除了我們牢記多線程中的各種基礎(chǔ)概念,還要多進(jìn)行實(shí)踐,在本站的多線程教程中就有關(guān)于多線程技術(shù)的許多知識(shí)要點(diǎn)和實(shí)例,我們只要付出努力,攻克多線程技術(shù)就在今朝!
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)