摘要:類(lèi)大家都叫他讀寫(xiě)鎖,他可以聽(tīng)時(shí)刻允許多線程進(jìn)入,讀寫(xiě)鎖比排它鎖性能好,因?yàn)榇蠖鄶?shù)情況讀多于寫(xiě)。和區(qū)別同步屏障,用于多線程計(jì)算結(jié)果最后合并場(chǎng)景。
Java內(nèi)存模型(jmm)
Why:保證多線程正確協(xié)同工作
看圖說(shuō)明:
文字解釋:線程a和線程b通信過(guò)程,首先線程a把本地內(nèi)存的共享變量更新到主內(nèi)存中,然后線程b去讀取主內(nèi)存的共享變量,最后更新到自己的本地內(nèi)存中
JMM涉及的特性以及規(guī)則特性
1.原子性:操作不可中斷,即一個(gè)線程操作不會(huì)被另一個(gè)線程影響
特例:在32的操作系統(tǒng)中,long型不是原子性
2.可見(jiàn)性:是指一個(gè)線程修改某個(gè)共享變量的值,另一個(gè)線程能否立刻知道該共享變量的變化。
經(jīng)常出現(xiàn)可見(jiàn)問(wèn)性問(wèn)題是因?yàn)橹嘏判?br>重排序:編譯器和處理器為了提高執(zhí)行效率,改變語(yǔ)句執(zhí)行順序,為此jmm有happenbefore規(guī)則。
3.有序性: 代碼語(yǔ)句按順序執(zhí)行
happenbefore規(guī)則
happenbefore規(guī)則是jmm的核心:作用保證前一個(gè)操作對(duì)后一個(gè)操作可見(jiàn)(同一個(gè)線程或者不同線程)
1.程序順序原則:一個(gè)線程內(nèi)保證語(yǔ)義的串行性
2.Volatile規(guī)則:volatile的寫(xiě),先發(fā)生于讀,這保證了volatile的可見(jiàn)性
3.鎖規(guī)則:解鎖必然發(fā)生在隨后的加鎖前
4.傳遞性:a先于b,b先于c,那么a必然先于c
5.線程的start()方法先于他的每一個(gè)動(dòng)作
6.線程所有操作先于線程的終結(jié)
7.線程的中斷先于被中斷線程的代碼
8.對(duì)象的構(gòu)造函數(shù)執(zhí)行、結(jié)束先于finalize()方法
原理:使用int成員變量表示同步狀態(tài),通過(guò)內(nèi)置fifo隊(duì)列完成資源獲取線程的排隊(duì)工作
他出名的兒子(繼承了aqs)
1.ReentrantLock(類(lèi)):大家都叫他重入鎖,因?yàn)樗梢灾貜?fù)加鎖,不過(guò)synchronized也有這功能。
2.ReentrantReadWriteLock(類(lèi)):大家都叫他讀寫(xiě)鎖,他可以聽(tīng)時(shí)刻允許多線程進(jìn)入,讀寫(xiě)鎖比排它鎖(ReentrantLock)性能好,因?yàn)榇蠖鄶?shù)情況讀多于寫(xiě)。
3.CountDownLatch(類(lèi)):大家叫他倒計(jì)時(shí)器,他允許一個(gè)或多個(gè)線程等待其他線程完成操作。
CyclicBarrier
1.同步屏障,用于多線程計(jì)算結(jié)果最后合并場(chǎng)景。
CountDownLatch
1.CountDownLatch的計(jì)數(shù)器只能使用一次,cyclicbarrier的計(jì)數(shù)器可以重置
類(lèi)圖:如下
使用:
1.通過(guò)ThreadPoolExecutor創(chuàng)建線程池
參數(shù)解釋?zhuān)?br>1.int corePoolSize :線程池基本大小
2.BlockingQueue :阻塞隊(duì)列,用來(lái)保存等待執(zhí)行的任務(wù)
3.int maximumPoolSize :線程池最大數(shù)量,他與阻塞隊(duì)列關(guān)系是這樣4.審的,如果隊(duì)列滿(mǎn)了,線程池沒(méi)有滿(mǎn),線程池會(huì)根據(jù)線程數(shù)量創(chuàng)執(zhí)行任務(wù)。
4.long keepAliveTime :空閑線程存或時(shí)間
5.TimeUnit unit :線程活動(dòng)保持時(shí)間的單位
提交
1.傳遞一個(gè)runnable(沒(méi)有返回值),需要返回值使用submit()方法。
threadPoolExecutor.execute(new Runnable() { @Override public void run() { } });公眾號(hào)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72838.html
摘要:它是發(fā)布的用來(lái)處理的。入門(mén)第一篇郵件簡(jiǎn)介及概述摘自入門(mén)第二篇?jiǎng)?chuàng)建郵件摘自入門(mén)第三篇發(fā)送郵件摘自入門(mén)第四篇接收郵件摘自入門(mén)第五篇解析郵件摘自第二講使用表示消息常用郵箱的地址及對(duì)應(yīng)的端口 JavaMail,顧名思義,提供給開(kāi)發(fā)者處理電子郵件相關(guān)的編程接口。它是Sun發(fā)布的用來(lái)處理email的API。它可以方便地執(zhí)行一些常用的郵件傳輸。JavaMail API是Sun公司為方便Java開(kāi)發(fā)人...
摘要:編程思想第版這本書(shū)要常讀,初學(xué)者可以快速概覽,中等程序員可以深入看看,老鳥(niǎo)還可以用之回顧的體系。以下視頻整理自慕課網(wǎng)工程師路徑相關(guān)免費(fèi)課程。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識(shí)點(diǎn)以及面試問(wèn)題,目前已經(jīng)開(kāi)源,會(huì)一直完善下去,歡迎建議和指導(dǎo)歡迎Star: https://github.com/Snailclimb/Java-Guide 筆者建議初學(xué)者學(xué)習(xí)Java的方式:看書(shū)+視頻+實(shí)踐(初...
摘要:中的多態(tài)引用的多態(tài)父類(lèi)的引用是可以指向子類(lèi)對(duì)象報(bào)錯(cuò)方法多態(tài)動(dòng)物具有吃的能力狗具有吃肉的能力狗具有看門(mén)的能力父類(lèi)的引用是可以指向子類(lèi)對(duì)象報(bào)錯(cuò) java中的多態(tài) showImg(https://segmentfault.com/img/bVbnDYA?w=1138&h=612); showImg(https://segmentfault.com/img/bVbnD6B?w=344&h=17...
摘要:泛型增加不同于課程類(lèi)型的數(shù)據(jù)往里增加字符串字符串泛型實(shí)現(xiàn)帶有泛型的類(lèi)型屬性添加大學(xué)語(yǔ)文基礎(chǔ)循環(huán)遍歷泛型子類(lèi)型紅色報(bào)錯(cuò)解決辦法添加無(wú)參的構(gòu)造方法泛型集合可以添加泛型的子類(lèi)型的對(duì)象實(shí)例我是子類(lèi)型的課程對(duì)象實(shí)例泛型不能使用基本類(lèi)型基 泛型 showImg(https://segmentfault.com/img/bVbnR10?w=1085&h=559); showImg(https://s...
摘要:中的接口實(shí)例智能手機(jī)和都有玩游戲的功能代碼具有玩游玩的功能具有玩游玩的功能 java中的接口 showImg(https://segmentfault.com/img/bVbnEzV?w=1194&h=621); showImg(https://segmentfault.com/img/bVbnEzX?w=1192&h=615); showImg(https://segmentfaul...
閱讀 1306·2021-11-23 09:51
閱讀 3421·2021-09-06 15:00
閱讀 996·2021-08-16 10:57
閱讀 1383·2019-08-30 12:46
閱讀 947·2019-08-29 12:22
閱讀 1615·2019-08-29 11:07
閱讀 3159·2019-08-26 11:23
閱讀 2993·2019-08-23 15:14